0

何かを理解しようとして、SQL クエリに頭を悩ませています。

簡単に言うと、これが私の (単純な) 表です。これは、ソーシャル ネットワーク サイトに追加された友人を表したものです。このようなテーブル形式を使用する必要があります。user1 と user2 は両方とも主キーです。

          User1       |       User2
    --------------------------------------
      foo@a.com       |   things@stuff.com
      foo@a.com       |   lala@hi.com
      things@stuff.com|   lol@k.com
      lol@k.com       |   foo@a.com
      foo@a.com       |   lol@k.com

私がする必要があるのは、たとえば foo@a.com と友達であるすべての一意のユーザーを返す SELECT ステートメントを作成することです。

SELECT User2
FROM members 
WHERE User1 = 'things@stuff.com'

後者を返す必要がある場合でも、foo@a.com ではなく lol@k.com を返します。

SELECT *
FROM members
WHERE User1 = 'foo@a.com'
OR User2 = 'foo@a.com'

私が思うにエラーを返しますか?おそらく複数の列を選択する何か。

したがって、ユニオン結合またはその他の結合が必要であると考えています(ユニオンなので重複はありませんか?)が、それを行う方法が本当にわかりません。

私はこれをPHPで実装しようとしているので、最後に書いたクエリが機能したとしても、返されたもの/必要なものに応じてUser1またはUser2をエコーする方法がわかりません。

4

3 に答える 3

2

UNION の使用 (パフォーマンスのため):-

SELECT User2
FROM members
WHERE User1 = 'foo@a.com'
UNION
SELECT User1
FROM members
WHERE User2 = 'foo@a.com'
于 2013-05-14T09:06:52.387 に答える
0

すべては、2 人のユーザー間の関係をどのように定義するかにかかっています。

たとえば、User1 = 'foo@a.com' および User2 ='mumu@f.com' のテーブル エントリがあるとします。どういう意味ですか?ユーザーfooがmumuと友達になったということですか?「友情」の方向性は重要ですか?

どちらかのユーザーが foo であるすべての行を単純にフェッチしたい場合、クエリは次のようになります。

    SELECT *
FROM members
WHERE User1 = 'foo@a.com'
OR User2 = 'foo@a.com'

正しい。

ただし、データを取得するには、両方の列を調べて結果を得る必要があります。

于 2013-05-14T09:07:00.387 に答える