我有一个用户(id,name)模型,兴趣(id,兴趣)模型和连接表users_interests(user_id,interest_id),用于多对多的关系。
如何选择具有2个匹配兴趣的所有用户。
假设有4个用户(迈克,安德烈,朱利安,约翰)。其中2个有3个匹配的兴趣。 例如迈克(音乐,体育,游戏),安德烈(音乐,体育,游戏)。其他2个用户有不同的兴趣。
我需要一个查询,我可以说给我所有用户有2个匹配的兴趣。 2是可变的。结果将是迈克和安德烈。
答案 0 :(得分:1)
恕我直言,您无法流利地构建此类查询,因此您必须选择退出原始SQL。
这里说的是用SQL
来解决这个问题的一种方法SELECT DISTINCT u.*
FROM
(
SELECT t1.user_id id1, t2.user_id id2, COUNT(*) count
FROM interest_user t1 JOIN interest_user t2
ON t1.user_id < t2.user_id
AND t1.interest_id = t2.interest_id
GROUP BY t1.user_id, t2.user_id
) q JOIN users u
ON q.count >= 2 -- change 2 to how many mutual interests you want to have
AND u.id IN(id1, id2);
这是 SQLFiddle 演示