kentuck1213
@kentuck1213

Правильно ли использовать несколько BETWEEN(x10) в моем случаи?

Есть таблица событий - event_dates, поля - start_date, end_date. Нужно достать все события который заняты в определенную дату.
array_dates = [
["2018-09-10 10:00:00", "2018-09-10 12:00:00"], # 0 - начало события, 1 - конец события
["2018-09-10 14:00:00", "2018-09-10 16:00:00"],
["2018-09-10 18:00:00", "2018-09-10 20:00:00"],
["2018-09-10 22:00:00", "2018-09-11 00:00:00"],
]

SELECT * FROM event_dates
WHERE (start_date BETWEEN array_dates[0][0] AND array_dates[0][1])
OR (end_date BETWEEN array_dates[0][0] AND array_dates[0][1])

OR (start_date BETWEEN array_dates[1][0] AND array_dates[1][1])
OR (end_date BETWEEN array_dates[1][0] AND array_dates[1][1])

OR (start_date BETWEEN array_dates[2][0] AND array_dates[2][1])
OR (end_date BETWEEN array_dates[2][0] AND array_dates[2][1])

OR (start_date BETWEEN array_dates[3][0] AND array_dates[3][1])
OR (end_date BETWEEN array_dates[3][0] AND array_dates[3][1])

Есть ли способ более оптимизированный ?
  • Вопрос задан
  • 261 просмотр
Пригласить эксперта
Ответы на вопрос 1
VladimirAndreev
@VladimirAndreev
php web dev
Её так.

Select * from item t where 1=1
or (t.s>'2018-01-01 10:00:00' and t.e<'2018-01-01 12:00:00)
or (t.s>'2018-01-01 14:00:00' and t.e<'2018-01-01 16:00:00)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы