Получить дни с существующими событиями

144
06 апреля 2018, 16:23

Здравствуйте.

Информация:

Есть таблица events со столбцами date_start, date_end и т.д. Надо выделить дни в месяце которые входят в промежуток между date_start и date_end. Сейчас у меня происходит так: вытаскиваются записи у которых месяц date_start совпадает с текущим месяцем

select * 
from events 
where active = '1' 
  and year(date_start) = '2018' 
  and month(date_start) = '04' 
  and lang = 'ru' 
order by date_start asc, time_start asc

Потом я циклом перебираю записи и записываю числа активных дней в отдельный массив

foreach ($events as $event) {
        $dateStart = date('j', strtotime($event->date_start));
        $dateEnd = date('j', strtotime($event->date_end));
        for ($i = $dateStart; $i <= $dateEnd; $i++) {
            if (in_array($i, $active)) continue;
            $active[] = (int)$i;
        }
    }

Но это работает только для дат в текущем месяце, но также могут существовать события которые начинаются в одном месяце, а заканчиваются в другом, также и с годом. Поэтому немного переделал запрос

select * 
from events 
where active = ? 
  and year(date_start) <= ? 
  and year(date_end) >= ? 
  and month(date_start) <= ? 
  and month(date_end) >= ? 
  and lang = ? 
order by date_start asc, time_start asc

Но при этом возникла потребность проверять месяц в зависимости от года. Т.е. сравнить год и если год из таблицы и текущий совпадают проверить еще и месяц. Так как в sql запросах я не силен или даже слаб, не могу додуматься как это реализовать.

Вопрос:

Как можно проверять месяц если год равен текущему году?

И можно ли избавиться от этого цикла и выполнить поставленную задачу лишь запросом? Как?

READ ALSO
Как сделать свой $this-&gt;title yii2

Как сделать свой $this->title yii2

В yii2 есть public $title ($this->title); Где он создан и как создать свой?

202
WPF и ASP.NET только видео уроки на русском для C# [требует правки]

WPF и ASP.NET только видео уроки на русском для C# [требует правки]

Посоветуйте видео уроки по WPF и ASPNET (С#) на русском

167