Napisałem zapytanie, aby sprawdzić, czy użytkownicy spełniają określone kryteria, z których jednym jest adres e-mail.
Nasza strona pozwoli użytkownikowi mieć lub nie mieć adresu 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`!=""
');
Czy to najlepszy sposób na sprawdzenie pustego pola w SQL? Właśnie wypróbowałem „NIE JEST NULL” i nadal zwróciło to rekord użytkowników bez adresu e-mail.
Powyższe zapytanie działa, ale z ciekawości zastanawiałem się, czy robię to we właściwy sposób.
NULL
Tak, to co robisz jest poprawne. Sprawdzasz, aby upewnić się, że pole e-mail nie jest pustym ciągiem. NULL oznacza brak danych. Pusty ciąg
""
to pusty ciąg o długości 0.Możesz również dodać sprawdzenie zerowe
źródło
OR email IS NOT NULL
jest tutaj zbędny (wynika to z poprzedniego warunku).email
pole.Możesz użyć
źródło
Istnieje różnica między pustym ciągiem (e-mail! = "") A NULL. NULL jest null i pusty ciąg to coś.
źródło
AND (email != '' AND email IS NOT NULL)
email IS NOT NULL
jest tutaj zbędne.!=
predykat nigdy nie będzie pasował doNULL
wartości.To zadziała, ale nadal istnieje możliwość zwrócenia rekordu zerowego. Chociaż podczas wstawiania rekordu możesz ustawić adres e-mail na ciąg o długości zero, nadal możesz chcieć poradzić sobie z przypadkiem, gdy adres e-mail NULL dostał się w jakiś sposób do systemu.
źródło
NULL
zwrócenia rekordu.Jeśli chcesz znaleźć wszystkie rekordy, które nie mają wartości NULL i są puste lub mają dowolną liczbę spacji, to zadziała:
Upewnij się, że po odwrotnym ukośniku jest spacja. Więcej informacji tutaj: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
źródło
sprawdź ten kod pod kątem problemu:
źródło