一尘不染

如果找不到行,则返回默认值

mysql

我有以下选择语句,以获取流的下一个预定项目。如果没有匹配的行,我希望它返回默认值。这是我正在使用的行:

SELECT `file` FROM `show`, `schedule` 
   WHERE `channel` = 1 AND `start_time` <= UNIX_TIMESTAMP() 
   AND `start_time` > UNIX_TIMESTAMP()-1800 AND `show`.`id` = `schedule`.`file` 
   ORDER BY `start_time` DESC LIMIT 1

那应该可以获取最近计划的项目,但如果它早于查询之前30分钟,则不会。但是,如果用户未安排任何时间,则我需要一个默认值,以便流中实际播放某些内容。我尝试了以下方法:

SELECT COALESCE(`file`, 'default.webm') FROM `show`, `schedule`...

和:

SELECT IFNULL(`file`, 'default.webm') FROM `show`, `schedule`

但是,如果未找到任何行,它将始终返回空结果。我该如何返回默认值?


阅读 312

收藏
2020-05-17

共1个答案

一尘不染

一种方法

SELECT IFNULL(MIN(`file`), 'default.webm') `file` 
  FROM `show`, `schedule` 
 WHERE `channel` = 1 AND `start_time` <= UNIX_TIMESTAMP() 
   AND `start_time` > UNIX_TIMESTAMP()-1800 AND `show`.`id` = `schedule`.`file` 
 ORDER BY `start_time` DESC LIMIT 1

由于只返回一行,因此可以使用一个聚合函数,在这种情况下MIN(),该函数可确保您NULL在未选择任何记录的情况下都能得到结果。然后IFNULL()COALESCE()将做它的工作。

2020-05-17