Buscando un campo vacío con MySQL

He escrito una consulta para verificar los usuarios con ciertos criterios, uno de ellos tienen una dirección de correo electrónico.

Nuestro sitio permitirá que un usuario tenga o no tenga 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 verificar si hay un campo vacío en SQL? Acabo de probar "IS NOT NULL" y esto todavía devolvió un logging de usuarios sin que ellos tuvieran una dirección de correo electrónico.

La consulta anterior funciona pero por curiosidad me pregunté si lo estoy haciendo de la manera correcta.

Un campo vacío puede ser una cadena vacía o NULL .

Para manejar ambos, use:

 email > '' 

que puede beneficiarse del acceso al range si tiene muchos loggings de correo electrónico vacíos (ambos types) en su tabla.

Sí, lo que estás haciendo es correcto. Está revisando para asegurarse de que el campo de correo electrónico no sea una cadena vacía. NULL significa que falta la información. Una cadena vacía "" es una cadena en blanco con la longitud de 0.

Puede agregar el cheque nulo también

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

Podrías usar

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

Hay una diferencia entre una cadena vacía (¡email! = "") Y NULL. NULL es nulo y una cadena vacía es algo.

Esto funcionará, pero aún existe la posibilidad de que se devuelva un logging nulo. Aunque puede establecer la dirección de correo electrónico en una cadena de longitud cero cuando inserta el logging, es posible que desee manejar el caso de una dirección de correo electrónico NULL entrando al sistema de alguna manera.

  $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 '); 

Si desea search todos los loggings que no son NULL, y que están vacíos o tienen cualquier cantidad de espacios, esto funcionará:

 LIKE '%\ ' 

Asegúrate 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

verifique este código para el problema:

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