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