Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проблема с запросом
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Проблема с запросом

Страниц (1): [1]
 

1. lamozavrik - 16 Февраля, 2012 - 16:56:57 - перейти к сообщению
Всем здрасте. У меня возникла проблемка, не знаю как решить (( Может кто поможет? Дело вот в чем:
Есть 3 таблицы: справочник товаров, заказы и товары в заказах.
справочник товаров хранит всю инфу о товарах (id, название, цена, ...)
таблица заказов хранит инфу про заказы (id, номер, дата, заказчик...)
таблица товаров в заказе (id, id_заказа, id_товара, кол-тво_заказаного_товара)
Так вот, мне нужно выбрать желательно одним запросом, такую инфу из этих трёх таблиц
id_заказа, номер_заказа, заказчик, дата, сумма_заказа

выбираю вот таким запросом:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT    o.id_заказа,
  3.                DATE_FORMAT(o.дата_заказа, '%d.%m.%Y %H:%i') AS date,
  4.                o.номер_заказа,
  5.                o.статус_заказа,
  6.                o.заказчик,
  7.                g.цена_товара * gio.кол-во_данного_товара в заказе AS sum
  8.                                 FROM заказы o, товары g, товары_в_заказах gio
  9.                                 WHERE o.id_заказа = gio.id_заказа AND
  10.                                 g.id_товара = gio.id_товара
  11.  


Проблем вроде нету кроме одной!
Если есть один заказ с двумя разными товарами, то мне его выбирает два раза, только с разной суммой. То есть например один товар стоит 1500 и его заказали две штуки, другой товар в том же заказе стоит 2000 и его заказали 3 штуки, то мне выведет как будто два разных заказа и сумма первого будет 3000, а второго 6000, все остальные поля одинаковы, и номер, и заказчик, и id.

Так вот собственно вопрос: Как изменить мой запрос, что бы он выводил все заказы и считал общую сумму одного заказа?
Постарался описать как можно подробнее )) Заранее всем откликнувшимся спасибо )
2. EuGen - 16 Февраля, 2012 - 17:58:05 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT    o.id_заказа,
  2.                DATE_FORMAT(o.дата_заказа, '%d.%m.%Y %H:%i') AS date,
  3.                o.номер_заказа,
  4.                o.статус_заказа,
  5.                o.заказчик,
  6.                SUM(g.цена_товара * gio.кол-во_данного_товара в заказе) AS sum_order
  7. FROM заказы AS o
  8.                LEFT JOIN товары AS g
  9.                     ON o.id_заказа = gio.id_заказа
  10.                LEFT JOIN товары_в_заказах AS gio
  11.                     ON g.id_товара = gio.id_товара
  12. GROUP BY
  13.                o.id_заказа

?
3. lamozavrik - 16 Февраля, 2012 - 18:20:03 - перейти к сообщению
EuGen, говроти, что не известное поле gio.id_заказа, но всё равно огромное тебе спасибо )) Совершенно забыл про GROUP BY )) Сделал немного другим запросом и все получилось ))

 

Powered by ExBB FM 1.0 RC1