【问题标题】:list results in mysql from the same table从同一个表中列出 mysql 中的结果
【发布时间】:2011-11-06 21:48:31
【问题描述】:

我如何从这个表中列出性别 = 男人和 int = 女人的 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   man
2   200    gender   woman
8   203    gender   man
9   204    gender   man
4   201    int      woman
10  204    int      male
11  203    int      woman
1   200    int      male

答案应该是:

iduser

204

我还有一个问题,如果我也想过滤年龄怎么办? 我正在尝试解决这个问题,但我无法... 我应该把“age=19”放在哪里? 我试试这个... a.a = '年龄' 和 a.b = '19' 但不工作... 谢谢。

【问题讨论】:

  • 这不能回答你的问题,但你应该改变你的表结构。
  • 嗨,我无法更改表的结构,是 wordpress 中的 usermeta 表。

标签: php mysql wordpress


【解决方案1】:

自联接应该可以工作。有点像(未经测试):

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'

但是您应该考虑优化数据库结构,因为这似乎有点性能要求。

【讨论】:

  • 所有这些反引号让我头疼。更不用说你与他们不一致而且他们完全不需要。
  • 几乎...但是JOIN 需要在WHERE 之前。
  • -1,因为查询没有回答问题并且是语法错误。
  • @user919943:如果你搜索 wordpress 和 usermeta,你会在网站上找到很多类似的问题。喜欢这个:stackoverflow.com/questions/4959610/…
  • @ypercube,确切地说是DISTINCT a.iduser
【解决方案2】:

哎呀!

无论如何,这不是数据库应有的样子。

SELECT DISTINCT a.iduser FROM usermeta t1
INNER JOIN usermeta t2 ON (t1.iduser = t2.iduser)
WHERE t1.a = 'gender' AND t1.b = 'man'
      AND t2.a = 'int' AND t2.b = 'woman'

【讨论】:

  • 它是(哎呀)EAV,但你不需要DISTINCT(我认为)。
  • @ypercube,不在示例数据中,但是如果您插入更多行,情况可能会改变,实际上我认为它已经在示例中输出了 2 行。
  • 你说得对,我认为(iduser, a, b) 是唯一的(如示例中所示)但在 worpress db 架构中没有这样的约束。
  • 这个查询对我有用。选择 a.iduser FROM sqlin a 加入 sqlin b ON b.iduser = a.iduser 其中 a.a = 'gender' AND a.b = 'man' AND b .a = 'int' AND b.b = 'woman' 谢谢!!
猜你喜欢
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 2016-05-14
  • 2015-04-04
相关资源
最近更新 更多