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

2023-12-29

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

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`...

And

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

但是,如果未找到行,它始终返回空结果。我怎样才能返回默认值呢?


一种方法可以做到这一点

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() or COALESCE()会做它的工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果未找到单行,则返回默认值 的相关文章

随机推荐