【问题标题】:list results in mysql with join [duplicate]列出带有连接的mysql结果[重复]
【发布时间】:2011-08-30 20:06:48
【问题描述】:

我如何从这个表中列出性别=男人和整数=女人和年龄=19 的 iduser?

Table usermeta
----------------------
id  iduser a        b
12  204    age      19
7   203    age      35
6   200    age      24
3   201    age      34
5   201    gender   male
2   200    gender   female
8   203    gender   male
9   204    gender   male
4   201    int      female
10  204    int      male
11  203    int      female
1   200    int      male

答案应该是:

iduser

204

我从另一个帖子中得到这个...

SELECT a.`iduser` FROM `table` a 
JOIN `table` b ON b.`iduser` = a.`iduser` 
WHERE a.`a`='gender' AND a.`b`='man' AND b.`a`='int' AND b.`b`='woman'

但不过滤年龄字段...

谢谢。

【问题讨论】:

  • 这是什么病床设计?!
  • 是来自 wordpress 的用户元表。我不能改变它。
  • 从不使用 WordPress 的好理由。

标签: php mysql sql wordpress


【解决方案1】:

这是另一种选择:

SELECT user_id
  FROM wp_usermeta
  WHERE (meta_key = 'age' AND meta_value = '19')
    OR (meta_key = 'gender' AND meta_value = 'male')
    OR (meta_key = 'int' AND meta_value ='male')
  GROUP BY user_id
  HAVING COUNT(*) = 3

【讨论】:

    【解决方案2】:

    看起来您需要另一个自我加入,我们将其别名为 t3。另外,我将别名从a,b 更改为t1,t2,因为您的示例完全不可读。 DISTINCT 可能需要也可能不需要。

    SELECT DISTINCT t1.`iduser`
    FROM `table` t1
      JOIN `table` t2 ON t1.`iduser` = t2.`iduser` 
      JOIN `table` t3 ON t1.`iduser` = t3.`iduser` 
    WHERE 
      t1.`a` = 'gender'
      AND t1.`b` = 'man'
      AND t2.`a` = 19
      AND t3.`b` = 'woman'
    

    【讨论】:

    • 我尝试了,但不工作...什么也不返回。
    【解决方案3】:

    你可以尝试这样的事情,但我认为它会慢慢起作用。

    SELECT iduser, GROUP_CONCAT(CONCAT(a,':',b) SEPARATOR ',') as groups 
    from TABLE
    group by iduser
    having LOCATE('gender:man', groups) != 0 and LOCATE('int:woman', groups) != 0 and LOCATE('age:19', groups) != 0
    

    我没有根据真实数据检查这个,所以如果发生任何错误,请将它们放在 cmets 中。

    另一种方式:

    SELECT t1.iduser from table t1 
    INNER JOIN table t2 on t1.iduser=t2.iduser and t1.a='age' and t2.a='gender'
    INNER JOIN table t3 on t2.iduser = t3.iduser and t3.a='int'
    where t1.b='19' and t2.b='man' and t3.b='woman';
    

    【讨论】:

    • 这项工作很好,谢谢!!我需要在大型 wordpress 数据库中使用它。这可能工作缓慢?
    • 我认为是的。对此查询运行解释
    • @alejoabella 检查帖子中的另一个查询。
    猜你喜欢
    • 2019-04-18
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多