Выбор записей между двумя датами с использованием PHP из базы данных MySql

В моем проекте я создаю и сохраняю счет (счет-фактуру). Дата сохранения Билла поступает в текстовое поле из javascript date picker (маленький всплывающий календар) перед сохранением. Формат даты: DD-MON-YYYY (18-Jun-2013).

Я использую тип данных « Текст » для хранения дат в таблице MySql.

Я сделал выбор записей (Предыдущие счета) из таблицы с помощью одной даты. , ,

$ result = mysql_query ("SELECT * FROM out WHERE date = '". $ date. "' ORDER BY billNo");

Теперь, что я хочу сделать: выбрать записи (счета) между двумя датами …..

Мой точный вопрос: возможно ли запросить базу данных mysql с этими настройками или мне нужно внести некоторые изменения, чтобы эффективно выбирать записи между двумя датами? Как я могу достичь этого?

Ps – Эффективно ли использовать
1. «SELECT * FROM out WHERE date МЕЖДУ». $ from_date. "' А ТАКЖЕ '" . $ to_date. «ORDER by id DESC»
Или
2. SELECT * FROM out WHERE date> "15-Jun-2013" и дата <"18-JUN-2013"

Вы должны использовать функцию strtotime PHP для преобразования строковой даты в формат временной strtotime UNIX и изменить тип данных MySQL для поля даты в TIMESTAMP .

Чем вы можете делать эффективные запросы с помощью > и < .

Вы можете сделать это по-разному, но вам нужно будет выполнить полное сканирование таблицы для каждого запроса.

 select the_dates, STR_TO_DATE(the_dates, '%d-%M-%Y') as converted from testing where STR_TO_DATE(the_dates, '%d-%M-%Y') between '2013-06-20' and '2013-06-23' 

Ссылка на SQLFiddle

Если это столбец DATE , вы можете получить все даты между 15 июня 2013 года и 18 июня 2013 года (включительно), используя это:

 WHERE date BETWEEN '2013-06-15' AND '2013-06-18' 

Если это столбец DATETIME , сделайте это вместо этого:

 WHERE date >= '2013-06-15' AND date < '2013-06-19' 

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

Приложение : просто увидели «сохранение как текст» среди всех других кричащих сведений. Обратите внимание, что этот ответ применяется только в том случае, если тип DATE или DATETIME . Я оставлю это, потому что лучшим ответом является изменение типа данных столбца, а затем использование этого или одного из других предлагаемых вариантов.

Я использую тип данных «Текст» для хранения дат в таблице MySql.

Это проблема. Вы должны хранить даты в datetime date или datetime в MySQL. Если вы не заботитесь о временной части, date должно быть достаточно.

Если вы измените свой тип данных на дату, выполните следующие действия:

 select x,y,z from table a where a.datecolumn between @startdate and @enddate 

Должен работать нормально.

Если вы используете текстовый тип данных, вам нужно будет указать столбец в столбец даты, а затем применить диапазон выбора даты, который будет медленнее из-за броска.

Всегда сохраняйте данные в типе данных, который соответствует его типу. Если дата, то столбец даты, если это текст, текст или varchar и т. Д. Уровень представления вашего приложения может беспокоиться о формате, в котором эти данные представлены пользователю.

Вы сказали, что используете столбцы TEXT для хранения дат. Это очень плохая идея. Если вы переключитесь на DATE или DATETIME , это станет тривиальным.

Поскольку вы храните его в виде текста, но вы хотите, чтобы SQL анализировал его, поскольку DATE SQL не понимает в первую очередь.

В вашем примере SQL будет использовать правила сравнения TEXT. Итак, 15 апреля <15-Мар> 15-DEC

Если вы храните даты в базе данных SQL, вы должны хранить ее как дату, а не как ТЕКСТ.