Возвращает левое значение, даже если правильное значение не существует - PullRequest
0 голосов
/ 26 апреля 2019

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

По существу:

Поиск свойств сервера и поиск текущегоstream:

  • Если нет живого потока (нет времени окончания нуля), сделайте что-нибудь со свойствами сервера
  • Иначе, Если есть живой поток (запись с нулем)время окончания), сообщите пользователю
SELECT t1.properties
FROM t1 
LEFT OUTER JOIN t_streams 
ON t1.serverID = t2.serverID 
WHERE t1.serverID = '<id>';

... возвращает и время окончания нуля, если t2 полностью пусто, что хорошо, но все строки, если это не так, что плохо.

SELECT t1.properties
FROM t1
LEFT OUTER JOIN t_streams
ON t1.serverID = t2.serverID
WHERE t1.serverID = '<id>'
AND t2.endtime IS NULL;

... ничего не возвращает, если активный поток не активен (ни одна строка не имеет нулевого конечного времени), но в любом случае ему необходимо как минимум вернуть t1.properties.

В основном я пытаюсьсоздать новый «прямой эфир», используя «свойства сервера», если в данный момент нет активного потока.

1 Ответ

1 голос
/ 26 апреля 2019

Я думаю, вам может понадобиться что-то вроде этого:

SELECT t1.properties
FROM t1 LEFT OUTER JOIN
     t_streams t2
     ON t1.serverID = t2.serverID
WHERE t1.serverID = '<id>'
ORDER BY (CASE WHEN t2.endtime IS NULL THEN 1 ELSE 2 END),
         t2.endtime DESC
LIMIT 1;

Возвращает одну совпадающую строку с предпочтением для endtime, равным NULL.

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