добавить условие WHERE в 3 таблицы LEFT JOIN запрос ...? - PullRequest
0 голосов
/ 08 ноября 2011

Я пробираюсь через мир php, но все еще нахожусь в ногах.Я написал запрос, который прекрасно работает для сбора того, что мне нужно из mysql, но я просто не могу заставить его работать с условием 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"

Любые и все предложения приветствуются, спасибо !!

Ответы [ 4 ]

3 голосов
/ 08 ноября 2011

Довольно просто: все условия WHERE должны быть помещены после всех JOIN.

2 голосов
/ 08 ноября 2011

Вам необходимо поставить предложение 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 голосов
/ 08 ноября 2011

когда вы используете левое или правое объединение, всегда используйте предложение 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 голосов
/ 08 ноября 2011

использование

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 
...