2012-02-22 105 views
1

我有一個noob問題,但對我來說是一個麻煩的問題。我在三個表中使用SELECT,其中一個是realtional(保持關係 - 用戶ID與Place的ID),第一個是用戶表,最後一個是用戶表。我寫了這個完美的woking查詢Mysql多表選擇條件

$query = "SELECT users.Username,usrxplc.User,places.Name 
      FROM users,usrxplc,places 
      WHERE usrxplc.Place=places.ID AND usrxplc.User=users.ID" 

吐出所有與所有用戶相關聯的地方。很好,但我想限制它僅限於某個用戶。似乎很簡單,但我卡住了。

回答

3

您使用WHERE子句來篩選結果,所以只需添加一個子句users.ID

select users.Username, 
    usrxplc.User, 
    places.name 
from users, 
    usrxplc, 
    places 
where usrxplc.Place = places.ID 
    and usrxplc.User = users.ID 
    and users.ID = 123 
+1

你有兩個'where'子句而不是'AND'。所以這是不正確的。正確的是'... WHERE usrxplc.Place = places.ID和usrxplc.User = users.ID和users.UserID = 123'。 – AlexZam 2012-02-22 16:19:41

+0

謝謝,謝謝,謝謝!我曾嘗試過1000次,但在我的語法中一直犯下愚蠢的錯誤。 – Whitewall 2012-02-22 16:22:25

+0

+1因爲它解決了這個問題 - 就像提供了JOIN方法:) – 2012-02-22 16:29:39

2

只是覺得有必要發佈另一種選擇 - 而不是選擇和所有的表,你可以使用INNER JOIN來加入一個表到另一個

SELECT 
    users.Username, 
    places.Name 

FROM users 
INNER JOIN usrxplc ON usrxplc.User=users.ID 
INNER JOIN places ON places.ID = usrxplc.Place 

WHERE users.ID = 111 

它的功能也可以通過其他的答案,但是當你到更復雜的查詢,你會發現,使用加入允許更大的優化,你能furthe表ř限制每個單獨的JOIN行得到,例如以下也是有效的,其中用戶行被加入到其它表

SELECT 
    users.Username, 
    places.Name 

FROM places 
INNER JOIN usrxplc ON usrxplc.Place = places.ID 
INNER JOIN users ON users.ID = usrxplc.User AND users.ID = 111 

在更復雜的查詢之前的限制,或者如果這些表要成爲大得多,這反過來會提供一個更優化的查詢一般來說

+0

謝謝!我怎麼不能標記你們兩個人的有用評論? – Whitewall 2012-02-22 16:37:54