Intereting Posts
Получить подмножество массива на основе массива ключей PHP preg_match для поиска и поиска динамического URL-адреса из HTML-страниц Вставка строк в MySQL Хорошие источники обучения для ООП-PHP, кто-нибудь? Сериализовать / unserialize PHP-объект-график для JSON значение инкремента внутри массива массивов (если ключ не существует, установите его в 1) отображать данные из базы данных в таблицу html Как изменить URL для каждого ISSET с помощью PAGINATION? PHP: Кириллические (русские) символы повторяются как «Вопросительные знаки». Зачем? Как изменять значения отображаются в панели задач Phabricator в режиме рабочего процесса отставания php-webdriver: дождитесь ответа браузера после отправки формы, используя click () Невозможно правильно проехать в Ларавеле Paypal: невозможно выполнить повторную авторизацию авторизированной ошибки платежа: произошла внутренняя ошибка службы php include_once не работает, несмотря на наличие файла и 777 разрешений изображения загружаются, но я их не вижу

Получить результаты запроса для диапазона дат

У меня есть следующий запрос:

$input_datestart = date("Ymd", strtotime($data["date_start"])); $input_dateend = date("Ymd", strtotime($data["date_end"])); //Calculate the recurrent dates $query = $query->join('events_dates_recurrent', 'events.id', '=', 'events_dates_recurrent.event_id') ->whereRaw("ABS(DATEDIFF('" . $input_datestart . "', CAST(events_dates_recurrent.start_date AS DATE)) % events_dates_recurrent.repeat_interval) = 0"); 

В течение одного дня я получаю желаемый результат, который должен получать повторяющиеся события из моей базы данных для заданного start_date.
Однако, когда задан диапазон дат (т. Е. Дата начала и окончания), я не уверен, как получить все результаты в одном запросе, избегая цикла, принимая во внимание, что повторяющиеся события все еще должны быть извлечены.

Какие-либо предложения?

Изменить : структура таблицы довольно проста:

Таблица events_dates_recurrent :

 event_id | start_date | end_date | repeat_interval 

Если идентификатор события связан с events таблицы с внутренним соединением.
Мне нужно получить все повторяющиеся события в пределах определенного диапазона дат.
End_date из таблицы «events_dates_recurrent» можно игнорировать на данный момент, возможно, это может служить цели позже, но это не является обязательным условием для этого запроса.

Я не очень удовлетворен этим решением, но он делает то, что он должен делать: то, что я в основном делаю, это цикл через интервал дат ввода и создание динамической строки запроса.
Мое приложение всегда ограничивает запрошенный интервал времени и времени до @maximum 1 месяц, поэтому строка запроса никогда не должна превышать максимальный предел строки.
Я не 100% о производительности, но мы увидим, как это работает.

 //Calculate the recurrent dates $query = $query->join('events_dates_recurrent', 'events.id', '=', 'events_dates_recurrent.event_id') ->where(function($join) use ($input_date_start, $input_date_end) { //Create a dynamic query to get all recurrent dates within the input time interval $query_string = "ABS(DATEDIFF('" . $input_date_start . "', CAST(events_dates_recurrent.start_date AS DATE)) % events_dates_recurrent.repeat_interval) = 0"; $temp_date_start = $input_date_start; while(strtotime($temp_date_start) <= strtotime($input_date_end)){ $temp_date_start = date('Ym-d',strtotime($temp_date_start . " +1 day")); //Create a raw query string $query_string = $query_string . " OR ABS(DATEDIFF('" . $temp_date_start . "', CAST(events_dates_recurrent.start_date AS DATE)) % events_dates_recurrent.repeat_interval) = 0"; } $join->whereRaw($query_string); });