Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка с дд.мм.гггг по дд.мм.гггг
 
 автор: new_user   (04.09.2008 в 11:33)   письмо автору
 
 

Здравствуйте уважаемые форумчане.

Исходные данные:
существует таблица, где имеются три поля: day, month, year (все поля типа varchar), где хранятся соответственно
значения дней, месяцов и годов.

Необходимый результат:
Зделать выборку в промежутке между указанными юзером датами ( т.е. с дд.мм.гггг по дд.мм.гггг).

Проблема:
При попытке выбрать записи допустим за один месяц ( 01|08|2008 по 31|08|2008 ) всё чудесно и хорошо
...AND day>=01 AND day<=30 AND month>=08 AND month<=08 AND year>=2008 AND year<=2008


Если же мы поимели наглость указать даты со средины одного месяца по середину другого ( 15|08|2008 по 15|09|2008 )
...AND day>=15 AND day<=15 AND month>=08 AND month<=08 AND year>=2008 AND year<=2008

на выходе получаем записи только за один день ( 15|08|2008 ).

Я понимаю что проблема тут
...day>=15 AND day<=15...


Вопрос:
Чё делать, всмысле как организовать запрос?

  Ответить  
 
 автор: Trianon   (04.09.2008 в 11:35)   письмо автору
 
   для: new_user   (04.09.2008 в 11:33)
 

Что мешает изменить формат хранения даты на более адекватный?

  Ответить  
 
 автор: new_user   (04.09.2008 в 12:07)   письмо автору
 
   для: Trianon   (04.09.2008 в 11:35)
 

В таблице более 700 записей.

  Ответить  
 
 автор: Trianon   (04.09.2008 в 12:14)   письмо автору
 
   для: new_user   (04.09.2008 в 12:07)
 

SQL-запрос пересчитает всю таблицу за сотую долю секунды, а вероятнее всего, еще быстрее.

совет остается в силе, даже если в таблице 700 тысяч записей.

  Ответить  
 
 автор: new_user   (04.09.2008 в 12:56)   письмо автору
 
   для: Trianon   (04.09.2008 в 12:14)
 

Хоршо, допустим у нас теперь есть только одно поле (к примеру TIMESTAMP).
Что по сути это изменит, кроме того что сравнение придётся производить через функцию DATE_FORMAT(), т.е.

...DАТЕ_FОRМАТ(`date_field`, '%d')>=15 AND DАТЕ_FОRМАТ(`date_field`, '%d')<=15...


Нужно изменить саму логику запроса, или я что то не понимаю?

  Ответить  
 
 автор: Trianon   (04.09.2008 в 13:07)   письмо автору
 
   для: new_user   (04.09.2008 в 12:56)
 

Подходящим форматом будет DATE , а не TIMESTAMP , но в данном случае это несущественно.
После этого можно прямо писать запросы
SELECT .... WHERE date_field BETWEEN '2007-11-17' AND '2008-08-25'

Естественно, даты пользователя перед вклеиванием в запрос нужно приводить к стандартному формату.

  Ответить  
 
 автор: new_user   (04.09.2008 в 14:06)   письмо автору
 
   для: Trianon   (04.09.2008 в 13:07)
 

Спасибо!!!

  Ответить  
 
 автор: ronin80   (04.09.2008 в 11:37)   письмо автору
 
   для: new_user   (04.09.2008 в 11:33)
 

чё то наподобие обсуждалось

http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=57272&page=2

  Ответить  
 
 автор: Trianon   (04.09.2008 в 11:42)   письмо автору
 
   для: ronin80   (04.09.2008 в 11:37)
 

>чё то наподобие обсуждалось

тема не имеет отношения к.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования