Php 使用join在mysql中列出结果
如何在此表中列出ID用户,其中性别=男性,int=女性,年龄=19Php 使用join在mysql中列出结果,php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,如何在此表中列出ID用户,其中性别=男性,int=女性,年龄=19 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 g
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
答案应该是:
用户
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'
但不过滤年龄字段
谢谢。看起来您需要另一个自加入,我们将其别名为
t3
。另外,我将别名从a,b
更改为t1,t2
,因为您的示例完全不可读。不同的
可能是必需的,也可能不是必需的
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'
你可以试试这样的东西,但我想它会很慢
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
我没有在真实数据上检查这一点,所以如果出现任何错误,请将其记录在评论中
另一种方式:
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';
以下是另一种选择:
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
那是什么病态的桌子设计?!是wordpress中的usermeta表。我不能改变它。这是一个永远不用WordPress的好理由。我试过了,但没用。。。不退货。这件工作很好,谢谢!!我需要在一个大的wordpress数据库中使用它。这会很慢吗?我想是的。对此进行解释query@alejoabella检查来自post的另一个查询。