Vérifiant qu'un terrain vide avec MySQL
J'ai écrit une requête pour vérifier pour les utilisateurs de certains critères, l'une étant qu'ils ont une adresse e-mail.
Notre site permet à un utilisateur d'avoir ou de ne pas avoir une adresse e-mail.
$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 pour un champ vide dans SQL? J'ai juste essayé "n'EST PAS NULLE" et ce toujours retourné à un utilisateur d'enregistrer sans avoir une adresse e-mail.
La requête ci-dessus fonctionne, mais par curiosité je me demandais si je suis en train de faire de la bonne façon.
Vous devez vous connecter pour publier un commentaire.
Un champ vide peut être soit une chaîne vide ou un
NULL
.De gérer à la fois, utilisez:
qui peuvent bénéficier de la
range
d'accès si vous avez beaucoup de mail vide record (deux types) dans votre tableau.NULL
WHERE email
et puis si la valeur est null ou vide sera traitée comme fauxOui, ce que vous faites est correct. Vous êtes à la vérification pour vous assurer 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 avec la longueur de 0.Vous pouvez ajouter de la valeur null vérifier également
OR email IS NOT NULL
est redondant ici (il est sous-entendu par la condition précédente).email
champ.Vous pouvez utiliser
Cela va fonctionner, mais il y a toujours la possibilité d'un enregistrement de valeur null est retournée. Si vous pouvez être en paramètre l'adresse de courriel à une chaîne de longueur zéro lorsque vous insérez le disque, vous pouvez toujours gérer le cas de NULL à l'adresse de courriel d'entrer dans le système en quelque sorte.
NULL
retourné.Il y a une différence entre une chaîne vide (email != "") et NULL. NULL null et une chaîne Vide est quelque chose.
AND (email != '' AND email IS NOT NULL)
!=
prédicat ne coïncidera jamais avec unNULL
valeur.Si vous voulez trouver tous les enregistrements qui ne sont pas NULL, et soit vide ou avoir un nombre quelconque d'espaces, cela va fonctionner:
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
vérifier ce code pour le problème: