我有下列表格。
用户位置表
User_id|location_id
_______|____________
1 | 3
2 | 2
3 | 1
4 | 1
用户兴趣表
User_id| Hobby_id
_______|____________
1 | 1
1 | 3
1 | 5
1 | 7
1 | 9
2 | 2
2 | 4
2 | 6
2 | 8
2 | 10
3 | 1
3 | 2
3 | 3
3 | 4
3 | 5
4 | 2
4 | 4
4 | 6
4 | 8
4 | 10
每个用户有五个爱好和一个位置。我想数一数相同爱好的数目。例如,如果我的爱好列表是[1,2,3,4,5],位置id是1,我需要这样的结果。
User_id|matched_hobby
_______|____________
3 | 5 ->[1,2,3,4,5] matched
4 | 2 ->[2,4] matched
对实施有什么想法吗?
*********************更新*********************
Alex Martelli的答案在只有一个位置ID的情况下非常有效。如果Tabel中有一系列位置ID呢?
前)
User_id|location_id
_______|____________
1 | 3
2 | 2
3 | 10
3 | 11
3 | 12
4 | 50
4 | 51
4 | 52
选择用户ID,计数(嗜好ID)
从用户位置加入用户爱好使用(用户ID)
其中(ul.location_id>=5,ul.location_id还有,嗜好(1,2,3,4,5)
分组依据(用户ID)
不起作用。它返回[匹配的爱好]*[位置ID]
应该是的
User_id|matched_hobby
_______|____________
3 | 5 ->[1,2,3,4,5] matched
最佳答案
看起来像
SELECT uh.User_id, COUNT(uh.Hobby_id)
FROM User_Location ul JOIN User_Hobby uh USING (User_id)
WHERE ul.Location_id = 1
AND uh.Hobby_id in (1, 2, 3, 4, 5)
GROUP BY (uh.User_id)
应该给出你想要的结果。