поиск между двумя датами

dog40

Новичок
поиск между двумя датами

народ, подскажите, возможно ли решить следующую задачу:

нужно организовать поиск определённого события или мероприятия, которое уже внесено в базу со следующими параметрами-
дата начала события(date_ start) в формате год, месяц, число
дата завершения события (date_end ) в формате год, месяц, число

задача в следующем- пользователь вводит в форму в поле x_ start дату начала поиска и в поле x_end дату предела поиска, результат должен быть список всех событий которые произошли между этими двумя датами...

запрос который я делаю к базе

PHP:
sql_query="select id, header, date_ start from index_tbl WHERE 
`date_ start` between '$x_ start' AND '$x_end' order by date_ start  DESC";
проблема в следующем, результат выходит нужный только тогда когда `date_ start` оказывается в промежутке указанным пользователем, но как только пользователь укажит интервал в котором дата начала события не попадает то результат нулевой...
как можно решить эту задачу, если вообще возможно?

заранее спасибо за помощь!
 

.des.

Поставил пиво кому надо ;-)
А Вы попробуйте подумать. Вариантов, когда событие частично или полностью попадает во временной промежуток, всего три. Ваш запрос покрывает один из них, осталось описать еще два. Ну а дальше, в зависимости от производительности (что покажет explain), или OR или UNION.
 

dog40

Новичок
спасибо думаю и теперь подумалось что может следует так запрос переделать(напрашивается просто):
PHP:
sql_query="select id, header, date_ start from index_tbl WHERE 
(`date_ start` between '$x_ start' AND '$x_end') OR (`date_ end` between '$x_ start' AND '$x_end') order by date_ start  DESC";
хотя всё равно выдаёт не всё что нужно... но всё таки надеюсь что в правельном направлении капаю.
 

BRat

o_0
dog40
это ты включил события, которые либо начинаются, либо заканчиваются в твоем временном промежутке, а есть еще такие, которые начинаются раньше и заканчиваются позже.
 

dog40

Новичок
BRat
в этом то и главная проблема, потому и спрашивал совета, может это вообще не возможно реализовать?
 

BRat

o_0
dog40
OR ('date_start' < '$x_ start' AND 'date_end' > '$x_end')
а ты попробуй еще вот это добавить в запрос, авось и поможет
 

dog40

Новичок
BRat

спасибо за помощь :) , на первый взгляд теперь всё отлично работает, а то я уже на ночь совсем не соображаю..

а я как раз зачем то делал третие условие в запросе так

OR ('date_start' > '$x_ start' AND 'date_end' < '$x_end')

и хотел уже забросить это дело подальше :D :confused:
 

chira

Новичок
если ещё подумать, то можно упростить:
Код:
...
'date_start' <= '$x_end' AND 'date_end' >= '$x_ start'
...
легко понять логику если нарисовать на бумаге все возможные варианты пересечения интервалов :)
 
Сверху