#php #sql
#php #sql
Вопрос:
У меня есть что-то вроде этого:
$from = min($start_date, $end_date);
$till = max($start_date, $end_date);
DB::table('booked')
->where('start', '<=', $from)
->where('end', '>=', $till)
->get();
Это хорошее решение для stackoverflow.
Кажется, это работает, но мне нужно обратное.
В моей БД у меня есть эти данные: начало: 2020-09-27 10:00:00 конец: 2020-09-27 12:00:00 Я должен запросить эти строки, где, например:
$ start_date(2020-09-27 9:00:00) и $ end_date(2020-09-27 11:00:00), где оба не в start: и end: Надеюсь, мой вопрос достаточно ясен.
Комментарии:
1. ваш end_date
2020-09-27 11:00:00
находится между заданным диапазоном и вашим сообщением противоположным образом2. Да, в этом и есть смысл, если он находится между заданным диапазоном, то я не хочу, чтобы он был в результате. Только если не в заданном диапазоне.
3. таким образом, если какой-либо параметр начальной или конечной даты находится между заданным диапазоном дат, вы не хотите включать
4. Да, точно, в БД хранится только заданный диапазон дат, а другой диапазон является переменным. Поэтому я хотел бы проверить, что переменная не находится в сохраненном диапазоне.
5. Просто для ясности. Допустим, данные в БД
start - 10, end = 12
и теперь, если диапазон вводаstart = 8, end = 9
=> да,start = 9, end = 11
=> нет,start = 11, end = 11:30
=> нет,start = 11, end = 13
=> нет,start = 13, end = 14
= да. Если это так, выдаст вам запрос
Ответ №1:
Если я правильно вас понял, это то, что вам нужно
$from = min($start_date, $end_date);
$till = max($start_date, $end_date);
DB::table('booked')
->where('start', '>=', $till)
->orWhere('end', '<=', $from)
->get();
Комментарии:
1. Предполагается, что у вас есть правильные (логически) данные в базе данных.
2. Хм, это здорово! Большое вам спасибо, я просто работаю над этим последние 2 часа, и я не могу понять, почему не работает должным образом! (Возможно, мне нужен отдых) Приветствия!
3. Это действительно хорошо работает, но у меня проблема. Если у меня больше даты в базе данных, то она больше не работает, есть идеи?
4. Что вы подразумеваете под «большей датой»? Что не работает? Пожалуйста, опишите.