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