我已经编写了一个查询来检查具有特定条件的用户,其中一个是他们有电子邮件地址。
我们的网站将允许用户拥有或不拥有电子邮件地址。
$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”,这仍然返回了用户记录而没有他们的电子邮件地址。
上面的查询有效,但出于好奇,我想知道我是否采用了正确的方法。
答案 0 :(得分:259)
空字段可以是空字符串,也可以是NULL
。
要处理两者,请使用:
email > ''
如果您的表中有大量空邮件记录(两种类型),则可以从range
访问权限中受益。
答案 1 :(得分:35)
是的,你在做什么是正确的。您正在检查以确保电子邮件字段不是空字符串。 NULL表示缺少数据。空字符串""
是一个长度为0的空字符串。
您也可以添加空检查
AND (email != "" OR email IS NOT NULL)
答案 2 :(得分:9)
您可以使用
IFNULL(email, '') > ''
答案 3 :(得分:2)
这将有效,但仍有可能返回空记录。虽然您可能在插入记录时将电子邮件地址设置为长度为零的字符串,但您仍可能希望处理以某种方式进入系统的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
');
答案 4 :(得分:1)
空字符串(email!=“”)和NULL之间存在差异。 NULL为null,空字符串为。
答案 5 :(得分:0)
如果要查找非NULL的所有记录,并且为空或具有任意数量的空格,则可以使用:
LIKE '%\ '
确保反斜杠后面有空格。更多信息:http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
答案 6 :(得分:-2)
numberOfRowsInSection