gpt4 book ai didi

mysql - 选择具有 5/10/15 个匹配关键字的用户

转载 作者:行者123 更新时间:2023-11-30 00:31:03 25 4
gpt4 key购买 nike

我有如下表:user(id, name)、interests(id,interest) 和 users_interests(user_id,interest_id)。

我想查找具有给定数量的匹配兴趣的所有用户。

假设有 4 个用户:(mike、andre、julian、john)。其中 2 人有 3 个匹配的兴趣。例如,mike(音乐、体育、游戏)、andre(音乐、体育、游戏)。其他 2 个用户有不同的兴趣。我需要一个查询,该查询将为我提供具有 2 个匹配兴趣的所有用户(2 是可变的)。结果将是迈克和安德烈。

最佳答案

请注意,这个答案大量借用 an answer to a very similar question .

SELECT
i.user_id,
GROUP_CONCAT(i.interest ORDER BY i.interest) AS common_interests
FROM
(SELECT u_i.user_id, i.interest
FROM interest AS i
JOIN users_interests AS u_i
ON i.id = u_i.interest_id) AS i
JOIN
(SELECT u_i.user_id, i.interest
FROM interest AS i
JOIN users_interests AS u_i
ON i.id = u_i.interest_id) AS i2
ON i.interest = i2.interest
AND i.user_id != i2.user_id
GROUP BY i.user_id , i2.user_id
HAVING COUNT(i.interest) = 3;

http://sqlfiddle.com/#!2/dcff0/6

我添加了 common_interests 列只是为了说明 GROUP_CONCAT() 函数对于此类情况的有用性。没有必要向函数添加订单,但如果您想进一步深入兔子洞并查看聚合结果(例如“所有共享兴趣集及其相应的用户”),它可能会很有用:

http://sqlfiddle.com/#!2/dcff0/21

但是,除非您的数据集非常小,否则至少可以说,这通常是一个不切实际的查询。

关于mysql - 选择具有 5/10/15 个匹配关键字的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22520504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com