MySQL Group Результаты за день с использованием timestamp
Мне нужно выполнить следующий запрос и вывести общее количество заказов и сумму заказов, сгруппированных по дням. Я храню все, используя временные метки.
SELECT
COUNT(id) as order_count,
SUM(price + shipping_price) as order_sum,
DAY(FROM_UNIXTIME(created)) as day
FROM `order`
WHERE '.implode(' AND ', $where).'
Мне нужно сгруппировать по Дню, но когда я делаю это в прошлые выходные, он берет мой order_count и делает его 1 вместо 3. Как я могу вытащить вышеуказанные значения, сгруппированные по дням?
ПРИМЕЧАНИЕ. Идейный метод используется только для определения периода времени (WHERE created >= TIMESTAMP AND <= TIMESTAMP)
Обновление
Без GROUP BY day
Array (
[order_count] => 3
[order_sum] => 69.70
[day] => 17
)
С GROUP BY day
Array (
[order_count] => 1
[order_sum] => 24.90
[day] => 17
)
Мне нужно, чтобы этот запрос возвращался каждый день с продажами, количеством заказов и суммой этих продаж. Я где-то пропустил часть головоломки.
Ответы
Ответ 1
Вы просто забываете добавить GROUP BY ...
в конец?
SELECT
COUNT(id) as order_count,
SUM(price + shipping_price) as order_sum,
DAY(FROM_UNIXTIME(created)) as order_day
FROM `order`
WHERE '.implode(' AND ', $where).'
GROUP BY order_day
Примечание:
Вы не можете использовать as day
для столбца дня, потому что day
- это функция MySQL. Используйте что-то вроде order_day
.
Единорогов
В комментарии @OMG Unicorn вы можете использовать:
DAY(FROM_UNIXTIME(created)) as `day`
Пока пакет day
в ` обращается назад.
Ответ 2
Вероятно, вы столкнулись с конфликтом имен между DAY()
(функция в MySQL) и day
(ваше имя переменной). Вы пытались использовать что-то, что не конфликтует, например order_day
?
Ответ 3
Вы также можете просто использовать:
SELECT
COUNT( id ) AS order_count,
SUM( price + shipping_price ) AS order_sum
FROM `order`
GROUP BY LEFT( timestamp, 10 )
или даже
GROUP BY SUBSTR (отметка времени, 1, 10)