2012-02-22 15 views
1

私には質問がありますが、面倒な質問があります。私は3つのテーブルの中の1つはrealtional(関係の保持 - 場所のIDに対するユーザーのID)の3つのテーブルでSELECTを使用しています。最初はユーザーのテーブル、最後の場所です。私はこの完璧なウォーキングクエリを書いています。Mysql条件付き複数のテーブルを選択

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

これは、すべてのユーザーに関連付けられたすべての場所から吐き出されます。さて、特定のユーザーに限定したいと思います。シンプルだが、私は立ち往生している。

答えて

3

あなたはこれだけusers.IDのための句を追加し、結果をフィルタリングするWHERE句を使用します。

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

「AND」の代わりに2つの 'where'節があります。それは間違っています。右は '... WHERE usrxplc.Place = places.IDとusrxplc.User = users.ID AND users.UserID = 123'です。 – AlexZam

+0

ありがとう、ありがとう、ありがとう!私は1000回前と同じように試しましたが、私の構文では愚かな間違いを続けました。 – Whitewall

+0

+1これは問題を解決するように - ちょうどジョインメソッドを提供するように感じた:) –

2

ちょうど代替を投稿する必要性を感じた - あなたはINNERがにJOINを使用することができます代わりに選択し、すべてのテーブルをそれはあなたがより複雑なクエリとテーブルの上に取得するときに、しかし、あなたは、あなたがfurtheすることができますとして使用することは大きな最適化が可能な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 

上に一つのテーブルを結合しますR各個々取得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

関連する問題