0

これは以前に尋ねられた可能性があり、検索方法がわかりません。これは基本的なことだと思いますが、理解できません。

以下のようにフォーマットされた友人テーブルがあります。

id toid fromid
1 45 50
2 50 45
3 46 45
4 45 46
5 40 45

ログインしているメンバーは$member_number...この場合は「45」です。

"toid"およびフィールドは"fromid"メンバー ID に対応します。メンバー「45」がログインしている場合、どのように SELECT クエリを記述して、彼らが友達であるすべてのメンバーを取得しますか?

彼らが友達になるには、往復の友達の列が必要です。たとえば、上の例では、メンバー 45 と 50 は、(行 1 と 2 で) 行き来する友人レコードであるため、友人です。行 3 と行 4 に示されているように、45 と 46 についても同じことが言えます。ただし、往復行がないため、40 と 45 は友達ではありません。

したがって、Select ステートメントの結果は... 50、46 になります。

4

1 に答える 1

3

このように、2 つの選択の和集合を使用できます。

select fromid from <table> where toid = $member_number
union
select toid from <table> where fromid = $member_number

ユニオンには重複を除外するという追加の利点があるため、例では 50 が 2 回表示されることはありません。

toid と fromid の両方が (個別に、または別のインデックスの左端の部分として) インデックス化されていることを確認してください。このクエリは非常に高速に実行されます。

また、(私の意見では) id 列は必要ありません。toid と fromid に主キーを配置すれば、このテーブル内の任意の行を識別するのに十分です。

例はSQLFiddleで見ることができます

于 2013-01-03T17:14:15.410 に答える