Подтвердить что ты не робот

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
)

Мне нужно, чтобы этот запрос возвращался каждый день с продажами, количеством заказов и суммой этих продаж. Я где-то пропустил часть головоломки.

4b9b3361

Ответ 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)