ユーザーと関心の 2 つのテーブルがあります。
関心は、関心 (「サッカー」など) とユーザー ID で構成されます。
ユーザーにクエリを実行し、少なくとも 3 つの関心を共有する他のすべてのユーザーを取得したいのですが、これを効率的に行う方法がわかりません。
「ユーザーの興味を取得し、それらの興味を少なくとも 3 つ共有する他のすべてのユーザーを取得する」ための SQL を作成するにはどうすればよいですか?
ありがとう。
ユーザーと関心の 2 つのテーブルがあります。
関心は、関心 (「サッカー」など) とユーザー ID で構成されます。
ユーザーにクエリを実行し、少なくとも 3 つの関心を共有する他のすべてのユーザーを取得したいのですが、これを効率的に行う方法がわかりません。
「ユーザーの興味を取得し、それらの興味を少なくとも 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)
「interests (interest, user_id)」を持っていることを前提としています。ユーザー名を含めるためのコメントを外します。
の代わりに ID 参照として関心を持つことも検討してくださいVARCHAR
。維持する方がより論理的です。