Ответ 1
Пустое поле может быть пустой строкой или NULL
.
Для обработки обоих используйте:
email > ''
который может извлечь выгоду из доступа range
, если у вас много пустой записи электронной почты (оба типа) в вашей таблице.
Я написал запрос для проверки пользователей с определенными критериями, один из которых у них есть адрес электронной почты.
Наш сайт позволит пользователю иметь или не иметь адрес электронной почты.
$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/en/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>";
}
}
}