Я написал запрос, чтобы проверить пользователей с определенными критериями, одним из которых является их адрес электронной почты.
Наш сайт позволяет пользователю иметь или не иметь адрес электронной почты.
$aUsers=$this->readToArray('
SELECT `userID`
FROM `users`
WHERE `userID`
IN(SELECT `userID`
FROM `users_indvSettings`
WHERE `indvSettingID`=5 AND `optionID`='.$time.')
AND `email`!=""
');
Это лучший способ проверить наличие пустого поля в SQL? Я только что попробовал "IS NOT NULL", и это все равно вернуло запись пользователя без адреса электронной почты.
Вышеупомянутый запрос работает, но из любопытства я подумал, правильно ли я это делаю.
NULL
Да, то, что вы делаете, правильно. Вы проверяете, не является ли поле электронной почты пустой строкой. NULL означает, что данные отсутствуют. Пустая строка
""
- это пустая строка длиной 0.Вы также можете добавить нулевую проверку
источник
OR email IS NOT NULL
здесь является избыточным (это подразумевается предыдущим условием).email
полем.Вы могли бы использовать
источник
Есть разница между пустой строкой (email! = "") И NULL. NULL является нулем, а пустая строка - это что-то.
источник
AND (email != '' AND email IS NOT NULL)
email IS NOT NULL
здесь избыточно.!=
предикат никогда не будет соответствоватьNULL
значению.Это будет работать, но по-прежнему существует вероятность возврата пустой записи. Хотя вы можете установить для адреса электронной почты строку нулевой длины при вставке записи, вы все равно можете как-то обработать случай, когда адрес электронной почты NULL попадает в систему.
источник
NULL
вернуть запись.Если вы хотите найти все записи, которые не равны NULL и либо пусты, либо имеют любое количество пробелов, это сработает:
Убедитесь, что после обратной косой черты есть пробел. Подробнее здесь: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
источник
проверьте этот код на наличие проблемы:
источник