2011-08-30 36 views
0

如何列出性別=男人和女性= 19歲的女性和女性的IDuser?在加入mysql時列出結果

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 

答案應該是:

ID用戶

我得到這個從另一個帖子...

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' 

,但不會過濾年齡字段。 ..

謝謝。

+2

什麼樣的病表的設計是? – emboss

+0

是wordpress的usermeta表格。我不能改變它。 – alejoabella

+0

永不使用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 
0

看起來你需要另一個自我加入,我們將其別名爲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' 
+0

我嘗試但不工作...沒有任何回報。 – alejoabella

0

你可以嘗試這樣的事情,但我認爲它會工作的很慢。

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'; 
+0

這個工作很好,謝謝! 我需要在一個大的wordpress數據庫中使用它。 這可能會工作緩慢? – alejoabella

+1

我認爲是的。在此查詢上運行解釋 –

+0

@alejoabella檢查來自帖子的另一個查詢。 –