Я сейчас работаю над небольшим проектом. У меня есть 2 таблицы ОБЛАСТЬ и ДЕЯТЕЛЬНОСТЬ
стол AREA
+---------------+
| a_id a_name |
+---------------+
| 1 area1 |
| 2 area2 |
| 3 area3 |
| 4 area4 |
+---------------+
Таблица ACTIVITY
+-----------------------------------------------------+
| id areaid starttime endtime |
+-----------------------------------------------------+
| 1 1 2018-09-21 15:00:00 2018-09-21 17:00:00 |
| 2 2 2018-09-23 15:00:00 2018-09-21 18:00:00 |
| 3 1 2018-09-21 17:00:00 2018-09-21 19:00:00 |
| 4 4 2018-07-21 12:00:00 2018-07-21 13:30:00 |
+-----------------------------------------------------+
Теперь я хочу выбрать все области и присоединиться к действию, которое в данный момент активно или будет запущено в следующий раз:
starttime >= NOW() AND endtime >= NOW()
starttime <= NOW() AND endtime >=NOW()
Также должны быть показаны области без активной или предстоящей активности.
Ожидаю следующий результат:
+-------------------------------------------------------+
| a_id id startime endtime |
+-------------------------------------------------------+
| 1 1 2018-09-21 15:00:00 2018-09-21 17:00:00 |
| 2 2 2018-09-23 15:00:00 2018-09-21 18:00:00 |
| 3 null null null |
| 4 null null null |
+-------------------------------------------------------+
Я пробовал несколько запросов, но пока не нашел решения.
На данный момент это была моя лучшая попытка:
SELECT *
FROM areas ar
LEFT JOIN activity a
ON ar.a_id = a.areaid
WHERE a.starttime >= NOW() AND a.endtime >= NOW() OR a.starttime <= NOW() AND a.endtime >= NOW()
ORDER BY a.starttime DESC;
Я с этим запросом я могу найти все результаты с активными или предстоящими действиями. Но как я могу ограничить выражение WHERE, чтобы получить только одну строку для каждого внешнего ключа?
Заранее спасибо!