これは、実行する操作に応じて1つのクエリまたは2つのクエリで実行できます。
シンプルなものが考えられます。
SELECT
f_id,
f1_id
FROM
friendship
WHERE
f_id=1
OR
f1_id=1
そしてあなたのような文を使用して、特定の友人を得ることができます。
SELECT name FROM people WHERE id IN(2,3)
代替が参加し、自己であるが、ここではハードの部分は、あなたのことですidはf_idとf1_idの両方にあるので、UNIONコマンドなどが必要です(未テスト)。
SELECT
p1.name,
p2.name,
FROM
friendship
INNER JOIN
people AS p1
ON friendship.f_id = people.id
INNER JOIN
people AS p2
ON friendship.f1_id = people.id
WHERE
p1.id=1 OR p2.id=1
膨大な量のレコードにかなり重いため、これらのオプションの速度を徹底的にチェックします。あなたがより多くのパフォーマンスを必要とする場合は、いくつかの選択肢を試してください。たとえば、常に最小のpeople.idをf_idに入れ、大きなものをf1_idに入れた場合、2つのクエリを実行して結合することができます。代わりに、それらを頻繁に必要とする場合、小さなビットを非正規化して結果をキャッシュすることです。
SELECT
f_id,
f1_id,
f_name,
f1_name
FROM
friendship
WHERE
f_id=1
OR
f1_id=1
'some_other_name' AS friend_names_table登録しよう:あなたが友情テーブルに名を追加するかどう
は、それはあなたの例えばjoingsの多くを保存します。また、あなたがすでに試したものを見せてください。 – Piskvor
[テーブルへの自己結合]の可能な複製(http://stackoverflow.com/questions/3035105/self-join-to-a-table) – Piskvor