2011-07-27 171 views
0

表1 用戶,城市選擇基於現場另一個表

表2 用戶,朋友

我想select * from Table1爲一個特定的用戶和他所有的朋友(誰也有網友在表1)。

試過這個,它發現所有的數據,但給了WHERE Table1.user = '$user'多行,即使每個用戶名都是唯一的。

SELECT * 
FROM Table1, Table2 
WHERE Table1.user = '$user' 
OR 
(Table2.user = '$user' and Table2.friends = Table1.user) 

非常感謝

+0

你期望輸出什麼? –

+0

用戶和表1中的城市 – Fred

+0

您將獲得每行($用戶,$用戶的朋友)的$ user一行,因爲user = $ user用於所有這些行... –

回答

2

你基本上有兩種不同的查詢(選擇用戶1的信息,選擇用戶1的朋友的信息)。您可以將它們與UNION結合使用。

SELECT 
    table1.user, 
    table1.city 
FROM 
    table1 
INNER JOIN 
    table2 
ON 
    table1.user = table2.friends 
WHERE 
    table2.friends = '$user' 

UNION 

SELECT 
    user, 
    city 
FROM 
    table1 
WHERE 
    user = '$user' 
+0

它很完美!我可以爲組合選擇添加ORDER BY嗎? – Fred

+0

找到答案:ORDER BY 2;第二個結果即城市的訂單。非常感謝您的幫助!!! – Fred

+1

ORDER BY 2不按第二個結果排序,它按常數2排序,這並不是一個排序。如果它產生了正確的結果,這是偶然的,如果你開始刪除/插入新行,它將不會繼續。如果你真的想要訂購整個結果集,將整個查詢包裝在'SELECT * FROM(現有查詢)ORDER BY city' –