我有以下 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(使用前将#替换为@)