ИНТЕРВАЛ 30 ДНЯ не дает ожидаемого результата

Я немного знаком с MySQL DATE и DATE_FORMAT.

Однако при выполнении запроса для диапазона дат с использованием INTERVAL — 30 DAY либо я не получаю правильный вывод, либо выдает ошибку. Глядя дальше в таблицу, поймите, что каждая строка для date_buy имеет такой формат:
Понедельник, 09 сентября 2015 года и т. Д. Я пытался использовать дату PHP (‘D d F Y’) вместо DATE (NOW ()) и т. Д., Но не могу решить проблему. Есть ли другой известный обходной путь для этого?

И да, попробовали МЕЖДУ date_buy_x и date_buy_y. Он ничего не возвращает, даже если в таблице есть записи.

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales`
WHERE date_buy >= $date - INTERVAL 30 DAY
GROUP BY date_buy

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales`
WHERE date_buy BETWEEN date_buy_x && date_buy_y
GROUP BY date_buy ORDER BY date_buy DESC

ОБНОВИТЬ

Поэтому, основываясь на предложениях и изучив параметры DATE_FORMAT и CURDATE, удалось отобразить данные. ORDER BY также должен быть в DATE_FORMAT (date_buy, ‘% a% d% M% Y’) для правильного вывода. Тем не менее, проблема все еще остается в отношении параметра INTERVAL 30 DAY.

WHERE datebuy <= DATE_FORMAT(CURDATE() - INTERVAL 30 DAY,'%a %d %M %Y')
GROUP BY date_buy ORDER BY DATE_FORMAT(date_buy, '%a %d %M %Y') DESC

Это возвращает данные, но все еще выходит за пределы диапазона, что заставляет меня думать, что он не принимает запрос INTERVAL.

Sat 22 November 2014 (50 sales)
Thu 18 December 2014 (50 sales)
Thu 22 January 2015 (20 sales)
Sun 25 January 2015 (20 sales)
Mon 06 April 2015 (25 sales)
Sun 12 April 2015 (25 sales)
Mon 03 August 2015 (10 sales)

Когда вывод должен быть только:

Mon 03 August 2015 (10 sales)

0

Решение

Вы могли бы сделать:

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales`
WHERE DATE(STR_TO_DATE(date_buy, '%a %d %M %Y')) >= $date - INTERVAL 30 DAY
GROUP BY date_buy

Если не $date также в этом формате строки, и в этом случае вам нужно использовать функцию STR_TO_DATE на нем тоже.

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales`
WHERE DATE(STR_TO_DATE(date_buy, '%a %d %M %Y')) >= DATE(STR_TO_DATE($date, '%a %d %M %Y')) - INTERVAL 30 DAY
GROUP BY date_buy
0

Другие решения

как насчет date_sub()используйте date_format в тот же формат, когда запрос

SELECT SUM(sales_total), date_buy FROM `Sebastian Estate Sales`
WHERE DATE_FORMAT(DATE(date_buy,'%Y %m %d')) >= DATE_FORMAT(DATE_SUB(DATE($date,INTERVAL 30 DAY),'%Y %m %d'))
GROUP BY date_buy
0

По вопросам рекламы [email protected]