Проверка пустого поля с MySQL

Я написал запрос для проверки пользователей с определенными критериями, один из которых у них есть адрес электронной почты.

Наш сайт позволит пользователю иметь или не иметь адрес электронной почты.

$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>"; } } }