MySQL DATE_ADD использование, 5-дневный интервал - PullRequest
14 голосов
/ 21 апреля 2010

Я пытаюсь выбрать общую сумму заказа ($) и количество счетов за 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
    )
)

Я довольно новичок в функциях даты 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

Ответы [ 3 ]

21 голосов
/ 21 апреля 2010

Чтобы получить записи между интервалами дат, используйте:

WHERE created BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 5 DAY)

В этом примере вы получите записи (при условии, что они существуют на сегодняшний день, включая время) за период между сегодняшним днем ​​и днями в будущем.Посмотрите на DATE_SUB, если хотите уйти в прошлое.

2 голосов
/ 21 марта 2014

Если созданный вами тип столбца int, просто попробуйте этот

created<= UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 5 DAY))')
0 голосов
/ 21 апреля 2010
WHERE created <= NOW() AND created >=NOW() - INTERVAL 5 DAY

или было бы лучше сравнить только часть ДАТА datetime:

WHERE DATE(created) <= date(NOW()) AND 
  DATE(created) >= DATE(NOW() - INTERVAL 5 DAY)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...