2012-08-05 164 views
1

我做了一個朋友列表,連接2個表格,FRIENDS表格和PLAYERS表格。sql連接查詢問題

朋友表

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

球員表

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

現在的球員頁面上的時候,我需要遍歷friends表,並找出他們有幾個朋友。所以爲此我必須檢查兩個player字段,以及target字段,即= $ name

然後獲取圖片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是玩家的設定檔名稱上。

任何人都可以告訴我如何調整,使其工作?

+0

您能具體解釋您的查詢字詞部分不工作,你會得到什麼錯誤/不正確的結果速記? – 2012-08-05 11:18:59

+0

這將更接近: SELECT p.pic,p.name FROM friends f INNER JOIN players p ON friends.player = p.name WHERE(f.player ='「。$ name。」'or f.target = ''。$ name。'')AND status ='朋友' – 2012-08-05 11:19:37

+0

它與JOIN,IIVE在僞造atm中完成。它可以是f.player或我需要加入的f.target。 – user1022585 2012-08-05 11:19:39

回答

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 = ? 
+0

當然,你應該使用某種獨特的ID來識別人,而不是他們的名字。 – 2012-08-05 11:27:44

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 在查詢?

+0

沒有f.name字段 – user1022585 2012-08-05 11:22:36

+0

正確thx糾正 – Tom 2012-08-05 13:50:17

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'