107 votes

Vérification d'un champ vide avec MySQL

J'ai écrit une requête pour rechercher les utilisateurs répondant à certains critères, l'un d'entre eux étant qu'ils ont une adresse électronique.

Notre site permettra à un utilisateur d'avoir ou de ne pas avoir d'adresse électronique.

$aUsers=$this->readToArray('
 SELECT `userID` 
 FROM `users` 
 WHERE `userID` 
 IN(SELECT `userID`
         FROM `users_indvSettings`
  WHERE `indvSettingID`=5 AND `optionID`='.$time.')
  AND `email`!=""
 ');

Est-ce la meilleure façon de vérifier si un champ est vide en SQL ? Je viens d'essayer "IS NOT NULL" et cela renvoie toujours un enregistrement d'utilisateur sans qu'il ait d'adresse électronique.

La requête ci-dessus fonctionne mais, par curiosité, je me suis demandé si je m'y prenais correctement.

285voto

Quassnoi Points 191041

Un champ vide peut être soit une chaîne de caractères vide, soit un champ de type NULL .

Pour gérer les deux, utilisez :

email > ''

qui peuvent bénéficier de la range si vous avez beaucoup d'enregistrements d'emails vides (des deux types) dans votre table.

42voto

Yada Points 9489

Oui, ce que vous faites est correct. Vous vérifiez que le champ email n'est pas une chaîne vide. NULL signifie que les données sont manquantes. Une chaîne vide "" est une chaîne vide de longueur 0.

Vous pouvez également ajouter la vérification de la nullité

AND (email != "" OR email IS NOT NULL)

14voto

M de Lorimier Points 11

Vous pourriez utiliser

IFNULL(email, '') > ''

2voto

Leslie Points 1604

Il y a une différence entre une chaîne vide (email != "") et NULL. NULL est nul et une chaîne vide est quelque chose.

2voto

pdavis Points 2497

Cela fonctionnera mais il est toujours possible qu'un enregistrement nul soit renvoyé. Bien que vous puissiez définir l'adresse électronique comme une chaîne de longueur zéro lorsque vous insérez l'enregistrement, vous pouvez toujours vouloir gérer le cas d'une adresse électronique NULL entrant dans le système d'une manière ou d'une autre.

     $aUsers=$this->readToArray('
     SELECT `userID` 
     FROM `users` 
     WHERE `userID` 
     IN(SELECT `userID`
               FROM `users_indvSettings`
               WHERE `indvSettingID`=5 AND `optionID`='.$time.')
     AND `email` != "" AND `email` IS NOT NULL
     ');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X