我有下列表格。
用户位置表

  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)

应该给出你想要的结果。

10-04 13:57
查看更多