понедельник, 14 февраля 2011 г.

Выборка диапазона дат в mysql с использованием DATETIME (грабли)

 Допустим у нас есть задача - вывести из таблицы заказы, которые были сделаны с 4 по 5 февраля 2011 года (данные в таблице хранятся в формате DATETIME) , пишем в скрипте


"SELECT * FROM orders where `date`>='".$date1."' AND `date`<='".$date2."'"

запрос будет выполняться такой

SELECT * FROM orders where `date`>='2011-02-04' AND `date`<='2011-02-05'

вроде бы всё должно работать, но при использовании DATETIME за 5-е февраля заказы не отобразятся. Почему? Сейчас расскажу!

mysql подставляет в запрос недостающие данные и получается что то вроде


SELECT * FROM orders where `date`>='2011-02-04 00:00:00' AND `date`<='2011-02-05 00:00:00'

Т.е. за 5е число он  выводит заказы только те, который были сделаны ровно в полночь и которые до этого, т.е. 4го числа, для корректной выборки заказов в диапазоне дат нужно делать так

"SELECT * FROM orders where `date`>='".$date1." 00:00:00' AND `date`<=' 23:59:59".$date2."'"

в результате запрос будет таким 

SELECT * FROM orders where `date`>='2011-02-04 00:00:00' AND `date`<='2011-02-05 23:59:59'

Теперь заказы выведутся за всё 4е число и за всё 5е.

3 комментария:

Анонимный комментирует...

Спасибо

Анонимный комментирует...

Спасибо тебе, добрый человек!

Юля комментирует...

Спасибо!!!

Отправить комментарий