我正在尝试最小化我的应用程序中的查询数量。在这种情况下,我需要通过其id查找聊天服务器的属性,并从另一个表中找到任何“实时流”,其中关联的服务器ID具有“开始时间”值但是具有空“结束时间”值(表示直播流仍在进行中)。如果没有正在进行的实时流,那么没有“结束时间”值将为空,但我仍然需要该服务器的属性。
实质上:
SELECT t1.properties
FROM t1
LEFT OUTER JOIN t_streams
ON t1.serverID = t2.serverID
WHERE t1.serverID = '<id>';
...如果t2完全为空,则返回null和endtime为null,这很好,但是所有行如果不是,那就很糟糕。
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。
基本上我正在尝试使用“服务器属性”创建一个新的“实时流”,如果没有当前活动的直播流。
我想你可能会想要这样的东西:
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
。