Перейти к содержимому


Выполненные заказы за указанное время, и сумма дохода по ним


  • Вы не можете ответить в тему
Сообщений в теме: 4

#1 hels

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 176 сообщений
Репутация: 3
Начинающий

Отправлено 16 May 2013 - 02:18 PM

Недавно решал такую задачу - нужно было вывести данные по заказам за дату от 2013-04-01 до 2013-05-01 которые были оплачены и сумму полученных денег с этих заказов. Думаю кому-то пригодится. Решил это в phpMyAdmin вот таким запросом:
SELECT `orderID`,`order_amount`,`order_time`,`statusID`
FROM (SELECT `statusID`,`orderID`,`order_amount`,`order_time`
FROM `thad_orders`
WHERE DATE(`order_time`) >'2013-04-01'
AND DATE(`order_time`)<'2013-05-01') AS T
WHERE `statusID` = 5
UNION
SELECT `orderID`, SUM(`order_amount`),`order_time`,`statusID`
FROM (SELECT `orderID`,`order_amount`,`order_time`,`statusID`
FROM (SELECT `statusID`,`orderID`,`order_amount`,`order_time`
FROM `thad_orders`
WHERE DATE(`order_time`) >'2013-04-01'
AND DATE(`order_time`)<'2013-05-01') AS T
) AS T
WHERE `statusID` = 5

Если нужно вывести и посчитать заказы с другим статусом или датой, меняем statusID и дату на нужные вам. Конешно было бы интереснее увидеть такое решение в админ панели шопа, но нет времени разбираться..

Как выглядит результат, глядите во вложении.

Прикрепленные файлы

  • Прикрепленный файл  1212.JPG   109.91К   52 Количество загрузок:

  • 0

#2 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 16 May 2013 - 08:03 PM

Не претендую на истину, не лез особенно в дебри развесистых SQL-запросов, но мой личный опыт показывает, что вложенные селекты и развесистые джойны (короче - сложные запросы) на более-менее крупных базах приводят к ОЧЕНЬ большому времени выполнения, а то и к отвалу по таймауту. Т.е. два-три запроса с промежуточной обработкой на PHP при том же результате выполняются НАМНОГО быстрее.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#3 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 16 May 2013 - 08:36 PM

а самое главное, что можно обойтись всего одним запросом ))

SELECT `statusID`,`orderID`,`order_amount`,sum(order_amount), `order_time`
FROM `temp_orders`
WHERE (DATE(`order_time`) between '2012-01-01' AND '2013-05-01') AND (`statusID` = 5) group by orderID WITH ROLLUP

UPD: групировку изменил на orderID
  • 0
Изображение Изображение Изображение

#4 hels

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 176 сообщений
Репутация: 3
Начинающий

Отправлено 17 May 2013 - 07:22 AM

Не претендую на истину, не лез особенно в дебри развесистых SQL-запросов, но мой личный опыт показывает, что вложенные селекты и развесистые джойны (короче - сложные запросы) на более-менее крупных базах приводят к ОЧЕНЬ большому времени выполнения, а то и к отвалу по таймауту. Т.е. два-три запроса с промежуточной обработкой на PHP при том же результате выполняются НАМНОГО быстрее.

было бы у меня стоко опыта, пока что учусь.. вначале это был просто запрос вывода товаров за дату, потом я сделал отдельно запрос вывода суммы за дату, а затем захотел это все вместить в один запрос ;D

а самое главное, что можно обойтись всего одним запросом ))

SELECT `statusID`,`orderID`,`order_amount`,sum(order_amount), `order_time`
FROM `temp_orders`
WHERE (DATE(`order_time`) between '2012-01-01' AND '2013-05-01') AND (`statusID` = 5) group by orderID WITH ROLLUP

UPD: групировку изменил на orderID


спасибо, а то я начитался от г-но мастеров на sql форуме что без UNION нельзя сделать поле с суммой внизу... кстати запрос запустил, там вместо `temp_orders` - `thad_orders` нужно, а сам результат такой-же только с разницей в том у меня в результате 4 столбца, а тут 5 т.е. сумма выводится в в отдельном столбце (в его конце), но зато сам запрос получился легче в 2 раза) вот только думаю, а как в php можно эту сумму вытащить, ну скажем создать кнопку и к ней привязать вывод суммы, ну и наверно 2 поля с датами?
  • 0

#5 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 17 May 2013 - 09:06 AM

спасибо, а то я начитался от г-но мастеров на sql форуме что без UNION нельзя сделать поле с суммой внизу... кстати запрос запустил, там вместо `temp_orders` - `thad_orders` нужно, а сам результат такой-же только с разницей в том у меня в результате 4 столбца, а тут 5 т.е. сумма выводится в в отдельном столбце (в его конце), но зато сам запрос получился легче в 2 раза) вот только думаю, а как в php можно эту сумму вытащить, ну скажем создать кнопку и к ней привязать вывод суммы, ну и наверно 2 поля с датами?

точно так же как и работа с основными полями, поскольку
sum(order_amount)
также является полем, то просто вытягиваем его стандартными методами
$row["sum(order_amount)"]

  • 0
Изображение Изображение Изображение