2012-10-11 55 views
1

我有麻煩形成我的用戶評估表我的查詢。MySQL查詢檢查用戶評估

目前該表看起來像這樣。

+-----+----------+----------+ 
| id | video_id | user_id | 
+-----+----------+----------+ 
| 1 |  1 |  1 | 
| 2 |  2 |  50 | 
| 3 |  1 |  115 | 
| 4 |  2 |  25 | 
| 5 |  2 |  1 | 
| 6 |  6 |  98 | 
| 7 |  3 |  1 | 
+-----+----------+----------+ 

我遇到的問題是形成返回USER_ID的人誰看過的1,2和3。所以在上面的例子中,只有1 USER_ID應返回VIDEO_ID的查詢。

我認爲做這樣的事情

SELECT user_id 
    FROM user_assessment 
    WHERE video_id = '1' AND video_id = '2' AND video_id = '3' 

但明確不正確。

任何幫助,將不勝感激。

回答

3

這裏的關鍵是,在HAVING子句中檢查值(3)等於包含在分組中元素的個數沒有重複VIDEO_ID的。這保證了所有三個視頻都包含在內。

SELECT user_id 
    FROM user_assessment 
    WHERE video_id IN (1, 2, 3) 
    GROUP BY user_id 
    HAVING COUNT(DISTINCT video_id) = 3 
+0

非常酷,我從來不知道MySQL有COUNT(DISTINCT) - 非常感謝! – PinnyM

+0

感謝您的幫助,完美工作 – Jako

2
SELECT user_id 
FROM user_assessment 
WHERE video_id IN (1, 2, 3) 
GROUP BY user_id 
HAVING COUNT(video_id) = 3 

這是假設你有每個用戶