Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Как можно сделать запрос в запросе в 4.0.20 (Max) 09/04/2006 - 12:52:49
      Re: Как можно сделать запрос в запросе в 4.0.20 (Dinky) 10/04/2006 - 19:45:13

> Original message text:
> From: Max - 09/04/2006 - 12:52:49
> Subject:Как можно сделать запрос в запросе в 4.0.20
> -----------------
> В очередной раз прошу помощи. Не знаю, как сделать запрос.
> Суть.
> Есть таблица zakaz с id заказами
>
> zakaz_id
> 1
> 2
> 3
>
> И есть таблица pay с денежными операциями по заказам вида
>
> pay_id zakaz_id type_pay summa
> 1 1 1 100
> 2 1 2 50
> 3 2 1 200
> 4 2 1 100
>
> И т.д. где type_pay тип операции (приход, расход и т.д.)
>
> Задача, вывести таблицу с заказами, где будет просуммированны деньги по заказам, причем, там где не было
> операций - должен быть 0
> Типа
>
> zakaz_id prihod rashod
> 1 100 50
> 2 300 0
> 3 0 0
>
> Делал это в MySQL 4.1 таким образом
> SELECT
> zakaz.zakaz_id
> ,(
> SELECT SUM(summa) AS summa
> FROM pay
> WHERE pay.zakaz_id=zak.zakaz_id AND pay.type_pay = 2
> ) prihod
> ,(
> SELECT SUM(summa) AS summa
> FROM $MAIN:db_payment AS pay_db
> WHERE pay.zakaz_id=zakaz.zakaz_id AND pay.type_pay = 1
> ) rashod
> FROM
> zakaz
> WHERE
> zakaz.zakaz IN (1,2,3)
>
>
> Пытаюсь тоже самое делать для MySQL 4.0
>
> SELECT
> zakaz.zakaz_id
> , SUM(pay_db.summa) AS rashod
> , SUM(pay_db2.summa) AS prihod
> FROM
> zakaz
>
> LEFT JOIN pay AS pay_db ON pay_db.type_pay = 2
> LEFT JOIN pay AS pay_db2 ON pay_db2.type_pay = 1
>
> WHERE
> zakaz.zakaz IN (1,2,3)
> AND pay_db.zakaz_id=zakaz.zakaz_id
> AND pay_db2.zakaz_id=zakaz.zakaz_id
>
> GROUP BY pay_db.summa,pay_db2.summa
>
> Казалось бы все тоже самое, но заказы, по которым не было денежных опреций обоих видов не попадают в таблицу.
> Посоветуйте, что можно придумать...
>


From: Dinky - 10/04/2006 - 19:45:13
Subject:Как можно сделать запрос в запросе в 4.0.20
-----------------
связи между таблицами надо правильно прописывать ;)

LEFT JOIN pay AS pay_db ON (pay_db.type_pay = 2 AND pay_db.zakaz_id=zakaz.zakaz_id)
LEFT JOIN pay AS pay_db2 ON (pay_db2.type_pay = 1 AND pay_db2.zakaz_id=zakaz.zakaz_id)
WHERE
zakaz.zakaz IN (1,2,3)

--
Dmitry



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
27319



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |