2011-02-06 11 views
2

こんにちは、私はどのように私は相互の友人を得ることができるかを調べようとしていますどのように相互の友人のリストを取得する

私は現在、これを考える問題があります。

私は、「ユーザー」と呼ばれるテーブルを持っており、これは、それは私がテーブルには「友情」 と呼ばれている

id | name 
----------- 
1 Kenny 
2 Jack 
3 Jimmy 
4 Chris 
5 Meg 
6 Jake 
7 Micheal 
8 Dude 

をどのように見えるかであり、これは、それがどのように見えるかです

user_a | user_b 
---------------- 
4   1   
7   5 
8   1 
2   4 
2   1 
5   2 
1   6 
1   7 

USER_Aは、User_Bへの送信します友人になるためのリクエスト... BAM友達がいる。 今、私のユーザー2、私はユーザー1の友人リストに行くと、私は共通の友達を見たいです。それを行う正しいSQLは何ですか?

答えて

2

ユーザ1がユーザ7と2人の友人になることはできないとします(つまり、user_a = 1, user_b=7の行とuser_a = 7, user_b = 1の行が存在しないことを意味します)。

SELECT IF(user_a = 1 OR user_a = 2, user_b, user_a) friend 
FROM friendship 
WHERE (user_a = 1 OR user_a = 2) OR (user_b = 1 OR user_b = 2) 
GROUP BY 1 
HAVING COUNT(*) > 1 
+0

これは興味深い点です(ユーザー1がユーザー7と2人の友人になることはできないと仮定します)。実際にその制限をバックエンドで強制することはできません。おそらくuser_aとuser_bを複合ユニークキーにすることが最善の方法です。これは関連する質問であるため、誰かがより良い解決法を提案できれば幸いです。 – user183037

+0

男、ありがとうございました! – Kenny

+0

@ user183037これまでにこのようなプロジェクトを構築しました。私は、user_a、user_b'にプライマリキーを作成し、友人関係の2行(両方の組み合わせ)を挿入しました。 (user_a = @ user'を検索するだけで)ユーザーの友人を探しやすく、 'user_b'だけに第2のインデックスを必要としません。 –

関連する問題