Я написал запрос для проверки пользователей с определенными критериями, один из которых у них есть адрес электронной почты.
Наш сайт позволит пользователю иметь или не иметь адрес электронной почты.
$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
.
Для обработки обоих используйте:
email > ''
которые могут извлечь выгоду из доступа к range
если у вас много пустой записи электронной почты (оба типа) в вашей таблице.
Да, то, что вы делаете, правильно. Вы проверяете, чтобы поле электронной почты не было пустой строкой. NULL означает, что данные отсутствуют. Пустая строка ""
– это пустая строка с длиной 0.
Вы также можете добавить нулевую проверку
AND (email != "" OR email IS NOT NULL)
Вы можете использовать
TRIM(IFNULL(email, '')) > ''
Есть разница между пустой строкой (email! = "") И NULL. NULL имеет значение 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 ');
Если вы хотите найти все записи, которые не являются NULL, и либо пустые, либо имеют любое количество пробелов, это будет работать:
LIKE '%\ '
Убедитесь, что после обратной косой черты есть пробел. Подробнее здесь: http://dev.mysql.com/doc/refman/5.0/ru/string-comparison-functions.html
$sql = "SELECT * FROM tablename WHERE condition"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)) { foreach($row as $key => $field) { echo "<br>"; if(empty($row[$key])){ echo $key." : empty field :"."<br>"; }else{ echo $key." =" . $field."<br>"; } } }