Запрос по принципу t1 LEFT JOIN (t2, t3)

Сергей123

Новичок
Запрос по принципу t1 LEFT JOIN (t2, t3)

Есть запрос:

SELECT
product.product_id,
SUM(order_product.quantity)
FROM
product
LEFT JOIN order_product USING (product_id)
GROUP BY product.product_id


Теперь ещё нужно, чтобы quantity считалось только для оплаченных заказов, а индикатор оплаченности хранится в третьей таблице - order.order_payed
Т.е справа от LEFT JOIN надо указать не order_product, а как бы "сначала"
пересечь order_product с таблицей order по order_id, а потом WHERE.

Не соображу как это записать...
 

icechel

Новичок
SELECT product.product_id, SUM(order_product.quantity)
FROM product
LEFT JOIN order_product USING (product_id)
LEFT JOIN order ON order_product.order_id = order.order_id
WHERE order.order_payed = 1
GROUP BY product.product_id
 

Falc

Новичок
SELECT
product.product_id,
SUM(order_product.quantity),
SUM( if( order.order_payed, order_product.quantity, 0) )
FROM
product
LEFT JOIN order_product USING (product_id)
LEFT JOIN order ...
GROUP BY product.product_id
 

Сергей123

Новичок
Falc, да, вариант...
Спасибо большое.

А я чё-то искал решение в сформулированном мною виде...
Опыта маловато, выходит.

Thanks.

-~{}~ 08.06.04 16:44:

icechel
тоже спасибо.
Я не указал явно: мне нужен был полный список товаров, не зависимо от того, заказывался ли он вообще. Твой WHERE съест незаказывавшиеся...
 

Falc

Новичок
Бресь Сергей
А тебе сумма только вторая нужна?
 

Сергей123

Новичок
Falc
вообще, - да. Суммарное кол-во (и некоторая другая статистика, я не приводил для простоты) нужна только по оплаченным.
Что-то можно упростить, что ли?
Что-то я совсем плох стал... Не вижу... Где?
 

Falc

Новичок
SELECT product.product_id, SUM(order_product.quantity)
FROM product
LEFT JOIN order_product USING (product_id)
LEFT JOIN order ... AND order.order_payed
GROUP BY product.product_id

-~{}~ 08.06.04 17:54:

А нет не будет работать :(

-~{}~ 08.06.04 18:02:

Бресь Сергей
Можно попробовать через RIGHT JOIN, но я с ними путаюсь.
 

Сергей123

Новичок
Ёлки, так его не зря так назвали?!
Я слышал о нём и перед тем как задать вопрос читаю:

RIGHT JOIN works analogously as LEFT JOIN. To keep code portable across databases, it's recommended to use LEFT JOIN instead of RIGHT JOIN.

И почему-то решил, что по каким-то причинам это просто alias в MySQL. Т.е. есть шанс, что можно что-то вроде
2,3 RIGHT JOIN 1
?
 

Falc

Новичок
Бресь Сергей
Нет это не алиас. Это если можно так назвать "зеркальная" операция. При применении и того и другого одновремено можно получить интересные эфекты, но я особо не разобрался с этим.
 

Сергей123

Новичок
Эээээээх...
Где-то на фирме валялся Дейтл... Видать пора сделать попытку №5.
Ладно, спасибо ещё раз.
 

Falc

Новичок
Бресь Сергей
Сделай как я вначале написал или тебя это не устраивает?
 

Falc

Новичок
Бресь Сергей
Надеюсь в будующем в mysql уже будут подзапросы :)
 
Сверху