2016-10-22 1 views
0

ユーザーIDとユーザー名を持つユーザーの表があります。 別のテーブルには、interestidと名前を持つ興味のリストがあります。 3番目のテーブルは、useridとinterestidを持つ結合テーブルです。テーブルのエントリのすべての組み合わせに対して一般的な結合を取得します。

各ユーザーのペアごとに、共通の関心の数を取得する必要があります。私はちょうどこれに取り組んでクエリを取得することはできません

SELECT u1.username AS me, u2.username AS you, COUNT(j.interestid) AS commoninterests 
FROM users u1, users u2 
INNER JOIN interests_join j 
    ON u1.id = j.id 
WHERE u1.id != u2.id 
GROUP BY u1.name 

:私は、最新のがこれです、多くのことを試してみました。どんな助け?

答えて

1

これは自己であるがinterests_joinに参加:

select ij1.userid, ij2.userid, count(*) 
from interests_join ij1 join 
    interests_join ij2 
    on ij1.interestid = ij2.interestid and 
     ij1.userid < ij2.userid 
group by ij1.userid, ij2.userid; 

注:(a、b)はなく、(B、A):このバージョンは2人のだけのユーザーのIDと一対のみを戻します。

ここでは、共通の関心事を持たないユーザーペアを含める場合、これは難しくなります。もしそうなら、あなたは最初cross joinを使用して、ユーザーのペアを生成し、利益のために持参する必要があります。

select u1.username, u2.username, count(ij2.userid) 
from users u1 cross join 
    users u2 left join 
    interests_join ij1 
    on ij1.userid = u1.userid left join 
    interests_join ij2 
    on ij2.userid = u2.userid and 
     ij1.interestid = ij2.interestid 
group by u1.username, u2.username; 
+0

=二つ目は、私は必要なものですが、それは私のために、エラーを投げ[ –

+0

エラーとは何ですか?恥ずかしがらないでください。 –

+0

それは私の間違いでした。コピー&貼り付け前に私は読んでいなかったし、私の変数名のいくつかは違っていました。それで結果は出ますが、正しい結果ではありません。 自分自身と共通の関心を持つユーザー2(真、彼女は1つの関心がある)を示しますが、ユーザー1との間で2を持っています(関心が1つだけの場合、これはどのように可能ですか)。 –

関連する問題