Проверка на пустое поле с MySQL - PullRequest
91 голосов
/ 24 февраля 2010

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

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

$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", и это все еще вернуло запись пользователей без их адреса электронной почты.

Приведенный выше запрос работает, но из любопытства я подумал, правильно ли я это делаю.

Ответы [ 7 ]

261 голосов
/ 24 февраля 2010

Пустое поле может быть либо пустой строкой, либо NULL.

Чтобы справиться с обоими, используйте:

email > ''

, который может воспользоваться доступом range, если в вашей таблице много пустых записей электронной почты (обоих типов).

35 голосов
/ 24 февраля 2010

Да, то, что вы делаете, правильно. Вы проверяете, чтобы убедиться, что поле электронной почты не является пустой строкой. NULL означает, что данные отсутствуют. Пустая строка "" является пустой строкой длиной 0.

Вы также можете добавить нулевую проверку

AND (email != "" OR email IS NOT NULL)
9 голосов
/ 08 июля 2013

Вы можете использовать

IFNULL(email, '') > ''
2 голосов
/ 24 февраля 2010

Это будет работать, но все еще существует вероятность возврата нулевой записи. Хотя вы, возможно, устанавливаете адрес электронной почты на строку нулевой длины, когда вставляете запись, вам все же может потребоваться обработать случай, когда в адрес электронной почты будет добавлен пустой адрес.

     $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
     ');
1 голос
/ 24 февраля 2010

Существует разница между пустой строкой (email! = "") И NULL. NULL - это ноль, а пустая строка - это что-то.

0 голосов
/ 17 сентября 2016

проверьте этот код для проблемы:

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

        }
    }
}
0 голосов
/ 27 июня 2013

Если вы хотите найти все записи, которые не равны NULL, либо пустые, либо имеют любое количество пробелов, это будет работать:

LIKE '%\ '

Убедитесь, что после обратной косой черты есть пробел. Больше информации здесь: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

...