【问题标题】:Different values in same colum, how to retrieve data同一列中的不同值,如何检索数据
【发布时间】:2012-11-26 20:23:56
【问题描述】:

我有一个基于 Wordpress 的基于自定义字段的 SQL 数据库。

以下3列相连:post_id、meta_key和meta_value。

meta_key 可以是“name”和“age”,而 meta_value 可以是“John”和“40”。 看起来像这样:

╔═════════╦══════════╦════════════╗ ║ POST_ID ║ META_KEY ║ META_VALUE ║ ╠═════════╬══════════╬════════════╣ ║559║名字║约翰║ ║ 559 ║ 年龄 ║ 40 ║ ║699║姓名║约翰║ ╚═════════╩══════════╩════════════╝

我需要统计所有姓名为 John 且年龄为 40 岁的人。这可以通过 select 语句实现吗?

【问题讨论】:

    标签: sql


    【解决方案1】:
    SELECT COUNT(*) totalCOunt
    FROM
    (
      SELECT post_ID
      FROM table1
      WHERE (meta_key = 'Name'  AND meta_value = 'John') OR
            (meta_key = 'Age'  AND meta_value = '40')
      GROUP BY post_ID
      HAVING COUNT(*) = 2
    ) s
    

    【讨论】:

    • 它不起作用,因为名称/年龄是“meta_key”列的值。
    • 嗯.. 接近了,但是如果我有很多约翰,我仍然会得到那些不是 40 岁的人:-/
    • 我的意思是,如果你将名字为“Bob”的人添加到同一个 post_id 中,年龄为 40。
    • 你能给我你所拥有的样本记录吗? :D
    • 问题似乎仍然是它返回的帖子同时显示了姓名和年龄,但年龄可能属于其他人:/
    【解决方案2】:

    我偷了你的小提琴。

    SELECT  a.meta_value,b.meta_value,count(*)
    FROM TABLE1 a
    inner join TABLE1 b on b.Post_ID = a.Post_ID
                      and a.meta_key = 'name'
    where b.meta_key = 'age'
    and a.meta_value = 'John'
    and b.meta_value = 40
    group by a.meta_value,b.meta_value
    

    http://sqlfiddle.com/#!2/ebebb/2

    哦,是的,我还假设帖子 ID 是将姓名与年龄相关联,否则我认为这需要魔法才能知道什么与什么相关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 2018-05-24
      相关资源
      最近更新 更多