Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как обьеденить WHERE EXISTS с SUM? / 6 сообщений из 6, страница 1 из 1
04.12.2014, 13:40:03
    #38824831
trawen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обьеденить WHERE EXISTS с SUM?
Подскажите пожалуйста как обьединить эти два запроса в 1.
Есть 2 таблицы, список заказов proshop_orders, и список продуктов в заказах proshop_orders_products.
Я запрашиваю продукты со статусом 4 и нужным префиксом, нужно посчитать сумму цен продуктов, у продукта есть цена product_price и количество его покупок product_qty.
Текущий вариант работает не очень быстро.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
		$z =  mysql_query("SELECT id FROM proshop_orders WHERE EXISTS (SELECT * FROM proshop_orders_products WHERE proshop_orders_products.order_id=proshop_orders.id AND LEFT(product_sku,3)='$prefix') AND proshop_orders.status_id=4");
		while ($t = mysql_fetch_array($z)) {

			$id = $t['id'];
			$z2 =  mysql_query("SELECT SUM(product_price*product_qty) AS product_price_sum FROM proshop_orders_products WHERE proshop_orders_products.order_id='$id' AND LEFT(product_sku,3)='$prefix'");
			$t2 = mysql_fetch_array($z2);

			$s += $t2[0];

		}
		$revenue_goods = $s;
...
Рейтинг: 0 / 0
04.12.2014, 13:43:30
    #38824835
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обьеденить WHERE EXISTS с SUM?
Код на ПХП следует постить в форуме по ПХП.
А в форуме по MySQL следует размещать только SQL-код.
Да и задачу следует объяснять более внятно - не "как я собираюсь сделать", а "что и из чего я хочу получить".
...
Рейтинг: 0 / 0
04.12.2014, 14:16:00
    #38824880
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обьеденить WHERE EXISTS с SUM?
trawen,
Наверное как-то так, но не проверял, т.к. нет желания придумывать исходные данные

Код: sql
1.
2.
3.
4.
5.
SELECT po.id, SUM(pop.product_price*pop.product_qty)
FROM proshop_orders po LEFT JOIN proshop_orders_products pop ON
	pop.order_id=po.id
WHERE LEFT(pop.product_sku,3)='$prefix' AND po.status_id=4 AND pop.id IS NOT NULL
GROUP BY po.id;
...
Рейтинг: 0 / 0
04.12.2014, 14:18:42
    #38824883
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обьеденить WHERE EXISTS с SUM?
JeStonetrawen,
Наверное как-то так, но не проверял, т.к. нет желания придумывать исходные данные

Код: sql
1.
2.
3.
4.
5.
SELECT po.id, SUM(pop.product_price*pop.product_qty)
FROM proshop_orders po LEFT JOIN proshop_orders_products pop ON
	pop.order_id=po.id
WHERE LEFT(pop.product_sku,3)='$prefix' AND po.status_id=4 AND pop.id IS NOT NULL
GROUP BY po.id;


Таки ошибся, вместо LEFT JOIN -> INNER JOIN лучше. Тебе ведь не нужны записи из proshop_orders , по которым нет ни одной записи в proshop_orders_products
...
Рейтинг: 0 / 0
04.12.2014, 14:26:55
    #38824897
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обьеденить WHERE EXISTS с SUM?
А если еще учесть тот факт, что ты после запроса к базе выполняешь тупо суммирование элементов
Код: php
1.
$s += $t2[0];


то лучше будет
Код: sql
1.
2.
3.
4.
SELECT SUM(pop.product_price*pop.product_qty)
FROM proshop_orders po INNER JOIN proshop_orders_products pop ON
	pop.order_id=po.id
WHERE LEFT(pop.product_sku,3)='$prefix' AND po.status_id=4


и
Код: php
1.
2.
$z =  mysql_query("SELECT SUM(pop.product_price*pop.product_qty) FROM proshop_orders po INNER JOIN proshop_orders_products pop ON pop.order_id=po.id WHERE LEFT(pop.product_sku,3)='$prefix' AND po.status_id=4");
$revenue_goods = mysql_fetch_array($z)[0];
...
Рейтинг: 0 / 0
04.12.2014, 15:26:20
    #38825018
trawen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обьеденить WHERE EXISTS с SUM?
JeStone,

Ух ты! Спасибо огромное! Работает!

За mysql_fetch_array($z)[0] отдельная благодарность, не знал такого пустяка.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как обьеденить WHERE EXISTS с SUM? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]