Escribí una consulta para buscar usuarios con ciertos criterios, uno de ellos es que tienen una dirección de correo electrónico.
Nuestro sitio permitirá que un usuario tenga o no una dirección de correo electrónico.
$aUsers=$this->readToArray('
SELECT `userID`
FROM `users`
WHERE `userID`
IN(SELECT `userID`
FROM `users_indvSettings`
WHERE `indvSettingID`=5 AND `optionID`='.$time.')
AND `email`!=""
');
¿Es esta la mejor manera de buscar un campo vacío en SQL? Acabo de probar "IS NOT NULL" y todavía devolvió un registro de usuario sin que tuvieran una dirección de correo electrónico.
La consulta anterior funciona, pero por curiosidad me pregunté si lo estaba haciendo de la manera correcta.
NULL
Sí, lo que estás haciendo es correcto. Está comprobando que el campo de correo electrónico no sea una cadena vacía. NULL significa que faltan datos. Una cuerda vacía
""
es una cadena en blanco con una longitud de 0.También puede agregar el cheque nulo
fuente
OR email IS NOT NULL
es redundante aquí (está implícito en la condición anterior).email
campo vacío .Podrías usar
fuente
Hay una diferencia entre una cadena vacía (email! = "") Y NULL. NULL es nulo y una cadena vacía es algo.
fuente
AND (email != '' AND email IS NOT NULL)
email IS NOT NULL
aquí es redundante.!=
el predicado nunca coincidirá con unNULL
valor.Esto funcionará, pero aún existe la posibilidad de que se devuelva un registro nulo. Aunque puede estar configurando la dirección de correo electrónico en una cadena de longitud cero cuando inserta el registro, es posible que aún desee manejar el caso de que una dirección de correo electrónico NULL ingrese al sistema de alguna manera.
fuente
NULL
devuelva el registro.Si desea encontrar todos los registros que no son NULL y que están vacíos o tienen cualquier número de espacios, esto funcionará:
Asegúrese de que haya un espacio después de la barra invertida. Más información aquí: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
fuente
verifique este código para el problema:
fuente