Eu escrevi uma consulta para verificar se há usuários com determinados critérios, sendo que eles têm um endereço de e-mail.
Nosso site permitirá que um usuário tenha ou não um endereço de e-mail.
$aUsers=$this->readToArray('
SELECT `userID`
FROM `users`
WHERE `userID`
IN(SELECT `userID`
FROM `users_indvSettings`
WHERE `indvSettingID`=5 AND `optionID`='.$time.')
AND `email`!=""
');
Esta é a melhor maneira de verificar se há um campo vazio no SQL? Acabei de tentar "IS NOT NULL" e ainda retornou um registro de usuário sem um endereço de e-mail.
A consulta acima funciona, mas por curiosidade me perguntei se estou fazendo da maneira correta.
NULL
Sim, o que você está fazendo está correto. Você está verificando se o campo de e-mail não é uma string vazia. NULL significa que os dados estão faltando. Uma string vazia
""
é uma string em branco com comprimento 0.Você também pode adicionar a verificação de nulo
fonte
OR email IS NOT NULL
é redundante aqui (está implícito na condição anterior).email
campo vazio .Você poderia usar
fonte
Há uma diferença entre uma string vazia (email! = "") E NULL. NULL é nulo e uma string vazia é alguma coisa.
fonte
AND (email != '' AND email IS NOT NULL)
email IS NOT NULL
é redundante aqui.!=
predicado nunca corresponderá a umNULL
valor.Isso funcionará, mas ainda há a possibilidade de um registro nulo ser retornado. Embora você possa estar configurando o endereço de e-mail para uma string de comprimento zero ao inserir o registro, você ainda pode querer lidar com o caso de um endereço de e-mail NULL entrar no sistema de alguma forma.
fonte
NULL
retorno do registro.Se você quiser encontrar todos os registros que não sejam NULL, estejam vazios ou tenham qualquer número de espaços, isso funcionará:
Certifique-se de que haja um espaço após a barra invertida. Mais informações aqui: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
fonte
verifique este código para o problema:
fonte