Renvoi des valeurs par défaut en cas d'échec des requêtes sur une seule ligne
Lors de l'exécution de requêtes SQL pour récupérer des données spécifiques, il est courant de rencontrer des situations dans lesquelles aucune ligne correspondante existe. Pour éviter de renvoyer des résultats vides, vous souhaiterez peut-être fournir une valeur par défaut.
Considérez l'instruction SQL suivante qui récupère le prochain élément planifié pour un flux :
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
Si aucune ligne correspondante n'est trouvée, cette requête renverra un résultat vide. Cependant, pour garantir que quelque chose soit lu sur le flux en cas d'absence d'éléments planifiés, vous pouvez renvoyer une valeur par défaut à la place.
Une approche pour y parvenir consiste à utiliser la fonction IFNULL ou COALESCE. En encapsulant la requête d'origine dans ces fonctions, vous pouvez spécifier une valeur par défaut qui sera renvoyée si aucune ligne n'est trouvée :
SELECT COALESCE(`file`, 'default.webm')
FROM `show`, `schedule` ...
SELECT IFNULL(`file`, 'default.webm')
FROM `show`, `schedule` ...
Cependant, ces tentatives donneront toujours un résultat vide lorsqu'aucune ligne n'est trouvée. Pour résoudre ce problème, une technique plus efficace consiste à utiliser une fonction d'agrégation telle que MIN avec 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
En utilisant la fonction d'agrégation MIN, vous vous assurez que vous obtiendrez un résultat NULL si aucun enregistrement n'est sélectionné. Cette valeur NULL sera ensuite remplacée par la valeur par défaut fournie par IFNULL.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3