Maison  >  Article  >  base de données  >  Comment renvoyer les valeurs par défaut lorsque les requêtes SQL sur une seule ligne échouent ?

Comment renvoyer les valeurs par défaut lorsque les requêtes SQL sur une seule ligne échouent ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 03:31:28893parcourir

How to Return Default Values When Single Row SQL Queries Fail?

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 où 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 :

<code class="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</code>

Si aucune ligne correspondante n'est trouvé, 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 :

<code class="sql">SELECT COALESCE(`file`, 'default.webm')
FROM `show`, `schedule` ...</code>
<code class="sql">SELECT IFNULL(`file`, 'default.webm')
FROM `show`, `schedule` ...</code>

Cependant, ces tentatives donneront toujours un résultat vide lorsqu'aucune ligne n'est trouvée :

<code class="sql">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</code>

les lignes sont trouvées. Pour résoudre ce problème, une technique plus efficace consiste à utiliser une fonction d'agrégation telle que MIN avec IFNULL :En utilisant la fonction d'agrégation MIN, vous vous assurez que vous obtiendrez un résultat NULL si aucun enregistrement sont sélectionnés. Cette valeur NULL sera ensuite remplacée par la valeur par défaut fournie par IFNULL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn