2011-11-08 26 views
0

私はPHPの世界を歩いていますが、まだ足を見つけています。私はmysqlから必要なものを収集するためにうまく動作するクエリを書いたが、WHEREの条件で動作するようにはできない。どんな助けでも大歓迎です!ここで3テーブルLEFT JOINクエリにWHERE条件を追加しますか?

は私の作業クエリがWHERE条件なしだ:

SELECT foo.*, users.name, SUM(bar.amt) Total FROM foo 
    LEFT JOIN bar ON foo.id = bar.foo_id 
    LEFT JOIN users ON foo.foo_owner_id = users.id 
    LIMIT 16 GROUP BY foo.id" 

そして、ここで私はWHERE条件を追加したが動作しません動作するはずだと思うものだ...

SELECT foo.*, users.name, SUM(bar.amt) Total FROM foo 
    WHERE foo.category = $var LEFT JOIN bar ON foo.id = bar.foo_id 
    LEFT JOIN users ON foo.foo_owner_id = users.id LIMIT 16 GROUP BY foo.id" 

任意およびすべての提案は歓迎です、ありがとう!

+0

前にそれを使用したい場合でも、

SELECT foo.*, users.name, SUM(bar.amt) Total FROM foo LEFT JOIN bar ON foo.id = bar.foo_id LEFT JOIN users ON foo.foo_owner_id = users.id WHERE foo.category = $var GROUP BY foo.id LIMIT 16; 

。このリファレンスをチェックしてください - > http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php – Rikesh

+0

は読者にあなたのクエリを見られるように長い行を分割する考えはありましたか?ちょっと興味があるんだけど。 –

答えて

3

非常に単純です:すべてのWHERE条件はすべてJOINの後に置く必要があります。

+0

あなたの迅速な対応に感謝します!私はそれをLIMIT条件の直前、LIMITとGROUP BYの間、そしてクエリの最後に置いてみましたが、まだ運がありません。 – Josiah

+0

あなたは正しいです。ヤヒアのように、私はそれをテストしたときにミスタイプしました。どうもありがとうございました! – Josiah

2

すべての結合テーブルの後ろにWHERE句を入れる必要があります。したがって

SELECT foo.*, users.name, SUM(bar.amt) Total 
FROM foo 
    LEFT JOIN bar ON foo.id = bar.foo_id 
    LEFT JOIN users ON foo.foo_owner_id = users.id 
WHERE foo.category = $var 
GROUP BY foo.id 
LIMIT 16; 

おそらくLIMIT句を最後にすることもできます。

+0

ええ、すべてソートされました、ありがとうございました! – Josiah

0

使用

SELECT 
foo.*, 
users.name, 
SUM(bar.amt) Total 
FROM foo 
LEFT JOIN bar ON foo.id = bar.foo_id 
LEFT JOIN users ON foo.foo_owner_id = users.id 
WHERE foo.category = $var 
GROUP BY foo.id 
LIMIT 16 
+0

それは、非常にありがとう! – Josiah

+0

あなたは歓迎されています:-)あなたが忘れることはありません。 – Yahia

0

あなたは句が後に合流する場所を、常に使用して左を使用して、または右に参加しています。 uは、IDによって順序がなどの条件がjoin` `後の文の末尾にあるべきLIMIT

関連する問題