Использование MySQL DATE_ADD, 5-дневный интервал
Я пытаюсь выбрать общую сумму заказа ($) и счет-фактуру за 5-дневный период в одном запросе. Хотя я не могу понять, что это произойдет. Текущий запрос у меня есть...
SELECT
COUNT(id) as invoice_count,
SUM(orderTotal) as orders_sum,
UNIX_TIMESTAMP(created) as created
FROM ids_invoice
WHERE DATE_ADD(created, INTERVAL +1 DAY)
AND userId = 23 LIMIT 5'
Я не совсем уверен, что DATE_ADD - это правильная функция, которую я ищу.
В настоящее время я получаю....
Array (
[0] => Array (
[invoice_count] => 420
[orders_total] => 97902.90
[created] => 1252596560
)
)
Array (
[0] => Array (
[invoice_count] => 68
[orders_total] => 14193.20
[created] => 1262900809
)
)
Я хотел бы получить что-то большее...
Array (
[0] => Array (
[invoice_count] => 18
[orders_total] => 4902.90
[date] => 04-19-2010
)
)
Array (
[0] => Array (
[invoice_count] => 12
[orders_total] => 5193.20
[date] => 04-20-2010
)
)
Я новичок в функциях date mysql, поэтому, возможно, я просто пропустил функцию, которая мне нужна при просмотре документов mysql.
UPDATE
Я обновил свой запрос... Это все равно не тянет строку за каждый день, на который были выставлены счета. Он только вытягивает счета-фактуры с 19-го, когда есть счета-фактуры с 20-го, которые соответствуют критериям userId.
SELECT
COUNT(id) as invoice_count,
SUM(orderTotal) as orders_sum,
UNIX_TIMESTAMP(created) as created
FROM ids_invoice
WHERE
created BETWEEN "2010-04-19 00:00:00" AND DATE_ADD("2010-04-19 00:00:00", INTERVAL +5 DAY) AND
userId = 17
Ответы
Ответ 1
Чтобы получить записи между диапазоном дат, используйте:
WHERE created BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 5 DAY)
В этом примере вы получите записи (при условии, что они существуют на сегодняшний день, включая время) между сегодняшним днем и днями в будущем. Посмотрите на DATE_SUB, если вы хотите уйти в прошлое.
Ответ 2
Если ваш созданный тип столбца - int, просто попробуйте этот
created<= UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 5 DAY))')
Ответ 3
WHERE created <= NOW() AND created >=NOW() - INTERVAL 5 DAY
или было бы лучше сравнить только DATE-часть datetime:
WHERE DATE(created) <= date(NOW()) AND
DATE(created) >= DATE(NOW() - INTERVAL 5 DAY)