2013-02-12 17 views
0

我有一個名爲user_meta表,它包含了類似的數據:MySQL的選擇/加入多行的用戶表元

--------------------------- 
| user_id | field | value | 
--------------------------- 
| 1 | 1 | Green | 
| 1 | 2 | Square | 
| 1 | 3 | Big | 
| 2 | 1 | Red | 
| 2 | 2 | Square | 
| 2 | 3 | Small | 
---------------------------- 

field列是一個表單字段的用戶的配置文件的數量。 value列是用戶通過表單提交的值。

如何編寫一個MySQL查詢,返回所有擁有「綠色大方塊」的用戶?

謝謝!

回答

4

這將返回你想要的結果。這將使用WHERE條款去返回所需的值的所有記錄,那麼算上不同的值,以確保僅3有:

select user_id 
from user_meta 
where value in ('Green', 'Square', 'Big') 
group by user_id 
having count(distinct value) = 3 

SQL Fiddle with Demo

+0

這種方式似乎更有效率。謝謝! – user1199981 2013-02-12 22:39:00

2

如果您堅持使用該模式,則使用子查詢將會有效。雖然它不會很快。

select userid 
from user_meta 
where user_id in (
    select user_id from user_meta 
    where (field = 1 and value = 'Green') 
) 
and user_id in (
    select user_id from user_meta 
    where (field = 2 and value = 'Square') 
) 
and user_id in (
    select user_id from user_meta 
    where (field = 3 and value = 'Big') 
) 
+0

這個偉大的工程。非常感謝你! – user1199981 2013-02-12 21:57:41

+0

'user_id in(field = 1 and value ='Green')'???這應該如何工作? – 2013-02-12 22:21:25

+0

@ypercube你說得對。我更新了它。謝謝。 – 2013-02-13 13:09:07

1

SELECT user_id FROM user_meta user_meta1 JOIN user_meta user_meta2 ON user_meta1.UserID = user_meta2.UserID JOIN user_meta user_meta3 ON user_meta2.UserID = user_meta3.UserID WHERE user_meta1.value = 'Green' AND user_meta2.value='Square' AND user_meta3.value='big'