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

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

Ответ 1

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

Для обработки обоих используйте:

email > ''

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

Ответ 2

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

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

AND (email != "" OR email IS NOT NULL)

Ответ 3

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

TRIM(IFNULL(email, '')) > ''

Ответ 4

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

Ответ 5

Это будет работать, но есть возможность вернуть нулевую запись. Хотя вы можете установить адрес электронной почты на строку нулевой длины при вставке записи, вы все равно можете обработать случай, когда 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
     ');

Ответ 6

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

LIKE '%\ '

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

Ответ 7

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

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

        }
    }
}