2012-04-02 14 views
0

私はusersテーブルとfriendsテーブルを持っています。2倍の同じテーブルの列1の結果を得る

私は1人のユーザーの友情を得たいが、両方のユーザー情報を結果として得たい。例えば 、のは、私はこれらのテーブルを持っているとしましょう。ここでは

- users (_id_, username, firstname, lastname) 
- friends (_#id1, #id2_) 

は、いくつかのデータです:

- users (1, foo, Foo, BAR) 
     (2, john, John, DOE) 
- friends (1, 2) 

私はfiendship WHERE id1 = 1 OR id2 = 1を照会した場合、私はJOINと私は行ごとに得ることができることを知って、ユーザーデータ。しかし、どのように1つの結果(1行)両方のユーザーデータを取得するには?

+0

希望する出力は? –

+0

Arionの要求によって出力が正確に出力されます。ありがとう。 – Max13

答えて

1
SELECT 
    u1.*, 
    u2.* 
FROM 
    friends 
    JOIN users AS u1 
     ON friends._#id1=u1._id_ 
    JOIN users AS u2 
     ON friends.#id2_=u2._id_ 
+0

ありがとう皆さん!私はそのようにすることができるのか分からなかった。 – Max13

+0

問題ありません。喜んで助ける – Arion

1
SELECT u1.*, u2.* 
FROM users u1 
JOIN friends f1 
ON u1._ID_ = friends._#id1_ 
JOIN users u2 
ON u2._ID_ = friends._#id2_ 

各行には、1人のユーザーからのすべての情報と、次に2番目のユーザーからのすべての情報が含まれます。最初のJOIN friends f1LEFT OUTER JOIN friends f1に置き換えて、友だちのないユーザーの行を表示することもできます。

注意:複数の友達がいるユーザーは複数の行を表示します。これらの行を列にピボットする方法はMySQLでは自動的にはありません。ただし、のGROUPを使用してから、GROUP_CONCAT関数を使用してフレンド情報を表示することができます。

+0

友人に「友人」のユーザーはいません; ありがとうございました! – Max13

+0

いいえ、友人なしでユーザーにユーザーがいる可能性があります。あなたのアプリケーションでこれが決して起こらないと確信しない限り:] – Konerak

関連する問題