Ich habe eine Abfrage geschrieben, um nach Benutzern mit bestimmten Kriterien zu suchen. Eine davon ist, dass sie eine E-Mail-Adresse haben.
Auf unserer Website kann ein Benutzer eine E-Mail-Adresse haben oder nicht.
$aUsers=$this->readToArray('
SELECT `userID`
FROM `users`
WHERE `userID`
IN(SELECT `userID`
FROM `users_indvSettings`
WHERE `indvSettingID`=5 AND `optionID`='.$time.')
AND `email`!=""
');
Ist dies der beste Weg, um in SQL nach einem leeren Feld zu suchen? Ich habe gerade "IS NOT NULL" ausprobiert und dies hat immer noch einen Benutzerdatensatz zurückgegeben, ohne dass dieser eine E-Mail-Adresse hat.
Die obige Abfrage funktioniert, aber aus Neugier habe ich mich gefragt, ob ich es richtig mache.
NULL
Ja, was Sie tun, ist richtig. Sie überprüfen, ob das E-Mail-Feld keine leere Zeichenfolge ist. NULL bedeutet, dass die Daten fehlen. Eine leere Zeichenfolge
""
ist eine leere Zeichenfolge mit der Länge 0.Sie können auch die Nullprüfung hinzufügen
quelle
OR email IS NOT NULL
ist hier redundant (dies wird durch die vorherige Bedingung impliziert).email
Feld haben.Du könntest benutzen
quelle
Es gibt einen Unterschied zwischen einer leeren Zeichenfolge (email! = "") Und NULL. NULL ist null und eine leere Zeichenfolge ist etwas.
quelle
AND (email != '' AND email IS NOT NULL)
email IS NOT NULL
ist hier überflüssig.!=
Prädikat wird niemals mit einemNULL
Wert übereinstimmen.Dies funktioniert, es besteht jedoch weiterhin die Möglichkeit, dass ein Nulldatensatz zurückgegeben wird. Obwohl Sie die E-Mail-Adresse beim Einfügen des Datensatzes möglicherweise auf eine Zeichenfolge mit der Länge Null setzen, möchten Sie möglicherweise dennoch den Fall behandeln, dass eine NULL-E-Mail-Adresse irgendwie in das System gelangt.
quelle
NULL
Datensatz zurückgegeben wird.Wenn Sie alle Datensätze suchen möchten, die nicht NULL sind und entweder leer sind oder eine beliebige Anzahl von Leerzeichen enthalten, funktioniert dies wie folgt:
Stellen Sie sicher, dass nach dem Backslash ein Leerzeichen vorhanden ist. Weitere Informationen hier: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
quelle
Überprüfen Sie diesen Code auf das Problem:
quelle