MySql LEFT JOIN - возвращает только одну строку из правой таблицы - выбранную по временному диапазону - PullRequest
0 голосов
/ 31 августа 2018

Я сейчас работаю над небольшим проектом. У меня есть 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, чтобы получить только одну строку для каждого внешнего ключа?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...