(event.start BETWEEN week.start AND week.end)
OR
(week.start BETWEEN event.start AND event.end)
Проще говоря, либо неделя начинается во время события, либо событие начинается в течение недели.
Давайте проверим это:
Событие начинается и заканчивается в течение недели
Событие начинается в течение недели.
Событие начинается до недели, но заканчивается в течение недели
Неделя начинается во время мероприятия.
Событие начинается в течение недели, но заканчивается после недели
Событие начинается в течение недели.
Событие начинается до недели, а также заканчивается после недели
Неделя начинается во время мероприятия.
Обратите внимание, что BETWEEN
в вышеприведенных выражениях используется просто для краткости.
Строгое выражение выглядит так:
(event.start >= week.start AND event.start < week.end)
OR
(week.start >= event.start AND week.start < event.end)
, при условии, что week.end
является week.start + INTERVAL 7 DAY
.
I. е. если ваша неделя начинается с Sun, 0:00:00
, то она должна заканчиваться на next Sun, 0:00:00
(не на Sat, 0:00:00
)
Это выражение выглядит сложнее, чем обычно используемое:
event.start < week.end AND event.end > week.start
, но первый более эффективен и удобен для индексов.
См. Эти статьи в моем блоге для сравнения производительности: