Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用join在mysql中列出结果_Php_Mysql_Sql_Wordpress - Fatal编程技术网

Php 使用join在mysql中列出结果

Php 使用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

如何在此表中列出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    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的另一个查询。