Retornando valores padrão quando consultas de linha única falham
Ao executar consultas SQL para recuperar dados específicos, é comum encontrar situações em que nenhuma linha correspondente existe. Para evitar o retorno de resultados vazios, você pode fornecer um valor padrão.
Considere a seguinte instrução SQL que recupera o próximo item agendado para um stream:
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
Se nenhuma linha correspondente for encontrada, esta consulta retornará um resultado vazio. No entanto, para garantir que algo seja reproduzido no stream no caso de não haver itens programados, você pode retornar um valor padrão.
Uma abordagem para conseguir isso é usar a função IFNULL ou COALESCE. Ao agrupar a consulta original nessas funções, você pode especificar um valor padrão que será retornado se nenhuma linha for encontrada:
SELECT COALESCE(`file`, 'default.webm')
FROM `show`, `schedule` ...
SELECT IFNULL(`file`, 'default.webm')
FROM `show`, `schedule` ...
No entanto, essas tentativas ainda resultarão em um resultado vazio quando nenhuma linha for encontrada. Para resolver esse problema, uma técnica mais eficaz é usar uma função agregada como MIN junto com IFNULL:
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
Ao usar a função agregada MIN, você garante que obterá um resultado NULL se nenhum registro for selecionado. Este valor NULL será então substituído pelo valor padrão fornecido por IFNULL.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3