2012-10-11 58 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 

这是假设你有每个用户