我有两个表:用户和兴趣。
兴趣由兴趣(例如“足球”)和用户 ID 组成。
我想查询一个用户并获取所有其他至少有 3 个兴趣的用户,但我不知道如何有效地做到这一点。
如何为“获取用户的兴趣并获取至少共享其中三个兴趣的所有其他用户”编写 SQL?
谢谢。
我有两个表:用户和兴趣。
兴趣由兴趣(例如“足球”)和用户 ID 组成。
我想查询一个用户并获取所有其他至少有 3 个兴趣的用户,但我不知道如何有效地做到这一点。
如何为“获取用户的兴趣并获取至少共享其中三个兴趣的所有其他用户”编写 SQL?
谢谢。
SELECT i.interest, i.user_id, COUNT(*) AS amount
# , u.username
FROM interests AS i
LEFT JOIN interests AS i2
ON i.interest LIKE i2.interest
# LEFT JOIN users AS u
# ON i2.user_id = u.id
WHERE i.user_id = 1
GROUP BY i.interest
HAVING amount >= 3
这将假设您有users (id, username)
“兴趣(兴趣,user_id)”。取消注释以包含用户名。
考虑将兴趣作为 ID 引用而不是VARCHAR
. 维护起来更合乎逻辑。