1

2つのテーブル、FRIENDSテーブル、およびPLAYERSテーブルを結合するフレンドリストを作成しています。

友達テーブル

 player   target     status
 -----------------------------
 john     eric       invited
 roger    moore      friends
 stan     winston    friends

選手テーブル

 name      pic     
 -------------------
 john     lol.jpg
 stan     skinhead.gif

プレーヤーのページで、friendsテーブルをループして、友達が何人いるかを調べる必要があります。playerしたがって、このためには、targetフィールドと=$nameのフィールドの両方をチェックする必要があります。

次に、pic idを取得するには、playersテーブルと結合する必要があります。

これはこれまでの私のクエリですが、明らかに機能しません(少し疑似):

SELECT p.pic, p.name FROM friends f INNER JOIN players p ON (player OR target)=p.name WHERE (f.player='" .$name. "' OR f.target='" .$name. "') AND status='friends'

$ nameは、現在のプレーヤープロファイルの名前です。

誰かがこれを調整して機能させる方法を教えてもらえますか?

4

3 に答える 3

1

SELECT p.pic, p.name FROM friends f INNER JOIN players p ON f.name=p.name WHERE (f.player='" .$name. "' OR f.target='" .$name. "') AND status='friends'

友達=あなたのクエリのf.player?

于 2012-08-05T11:19:56.143 に答える
1

これを試して:

SELECT p.pic, 
       p.name 
FROM friends f 
   INNER JOIN players p ON p.name IN (f.player, f.target)
WHERE (f.player='" .$name. "' OR f.target='" .$name. "') 
AND status='friends'

これはの省略形です

SELECT p.pic, 
       p.name 
FROM friends f 
   INNER JOIN players p ON p.name = f.player OR p.name = f.target
WHERE (f.player='" .$name. "' OR f.target='" .$name. "') 
AND status='friends'
于 2012-08-05T11:29:51.893 に答える
1

すべてを1つのクエリで取得するには、ユニオンを使用する必要があります。

SELECT * FROM friends JOIN players ON (target = name AND status = friends)
WHERE player = ?
UNION ALL
SELECT * FROM friends JOIN players ON (player = name AND status = friends)
WHERE target = ?
于 2012-08-05T11:26:43.067 に答える