а, нет, ты сравшиваешь даты. Тогда не понятно где затык. На вид выглядит хорошо. (`date_in` BETWEEN 'начало периода' AND 'конец периода') AND (`date_out` BETWEEN 'начало периода' AND 'конец периода') покажет тех, кто начался и закончился в этом периоде. Если написать OR, то выберет всех, кто хотя бы начался или хотя бы закончился в указанном периоде. А че не так?
Помоему тему стоит разделить на "id последней записи" и "пересечение периодов", не? Про проверку пересечения периодов: http://artoodetoo.ru/intersect-periods/ Периоды времени (b1..e1) и (b2..e2) пересекаются если выполняется такое условие: Код (PHP): (b1 <= e2) AND (b2 <= e1)
Я просто хотел немного сократить этот запрос (нормально отрабатывающий): http://php.ru/forum/viewtopic.php?f=9&t=55060#p440536 Этим: http://php.ru/forum/viewtopic.php?f=9&t=55060#p440559
Как рабочий вариант sql запроса - Да. Я просто не понял почему нельзя указать 2 колонки (expr) для выборки в BETWEEN: Код (PHP): expr BETWEEN min AND max
Евгений, ты понял, что твои четыре битвина можно заменить на два неравенства? Добавлено спустя 1 минуту 29 секунд: потому что нельзя. язык SQL интерпретирует это не так как ты хочешь.
Ага, давай тестируй. Даже умные люди не могли поверить сходу. А оно действительно так. ))) P.S. Тут есть маленькая тонкость: я подразумеваю, что период задан „включительно“, поэтому в неравенствах стоит меньше-или-равно. В противном случае надо было бы писать строго меньше.
Да, все четыре случая пересечения отрабатывают верно. То есть. 1. Хвост заезжает 2. Голова заезжает. 3. Полностью период в периоде 4. Несколько периодов в периоде Код (PHP): SELECT `id`, `box` FROM `orders` WHERE `box` = 32 AND ('2015-10-01' <= date_out AND date_in <= '2015-10-07')