Запрос Laravel 7 DB только там, где диапазон дат не входит в диапазон дат

#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. Что вы подразумеваете под «большей датой»? Что не работает? Пожалуйста, опишите.