J'ai écrit une requête pour vérifier les utilisateurs avec certains critères, l'un étant qu'ils ont une adresse e-mail.
Notre site permettra à un utilisateur d'avoir ou non une adresse email.
$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 rechercher un champ vide dans SQL? Je viens d'essayer "IS NOT NULL" et cela a quand même renvoyé un enregistrement d'utilisateurs sans qu'ils aient une adresse e-mail.
La requête ci-dessus fonctionne mais par curiosité, je me suis demandé si je le fais correctement.
NULL
Oui, ce que vous faites est correct. Vous vérifiez que le champ e-mail n'est pas une chaîne vide. NULL signifie que les données sont manquantes. Une chaîne vide
""
est une chaîne vide d'une longueur de 0.Vous pouvez également ajouter la vérification nulle
la source
OR email IS NOT NULL
est ici redondant (cela est impliqué par la condition précédente).email
champ vide .Vous pourriez utiliser
la source
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.
la source
AND (email != '' AND email IS NOT NULL)
email IS NOT NULL
est ici redondant.!=
le prédicat ne correspondra jamais à uneNULL
valeur.Cela fonctionnera mais il est toujours possible qu'un enregistrement nul soit renvoyé. Bien que vous définissiez l'adresse e-mail sur une chaîne de longueur zéro lorsque vous insérez l'enregistrement, vous souhaiterez peut-être toujours gérer le cas d'une adresse e-mail NULL entrant d'une manière ou d'une autre dans le système.
la source
NULL
retour de l' enregistrement.Si vous voulez trouver tous les enregistrements qui ne sont pas NULL, et qui sont vides ou ont un nombre quelconque d'espaces, cela fonctionnera:
Assurez-vous qu'il y a un espace après la barre oblique inverse. Plus d'infos ici: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
la source
vérifiez ce code pour le problème:
la source