Me gustaría filtrar ciertos campos en mi base de datos que son nulos, 0 o ''. Desafortunadamente, al usar NULL en una condición IN no se puede devolver nada ... Creo que esto se debe a las comparaciones NULL en SQL que se evalúan como UNKNOWN. Por ejemplo:Usando find y null mientras ordeando otros valores
$filterField = $this->Model->find('list', array(
'fields' => array('id','name'),
'recursive' => 0,
'conditions' => array('Model.related_string' => array(Null, 0, '')),
'order' => array('Model.name ASC')
)
);
Esto siempre devuelve ningún error y cero filas porque la consulta resultante tiene SELECT ... WHERE 'Model'.'related_string' IN (NULL, 0, '')
. Sin embargo, si quiero O la condición NULL por separado, parece que no puedo hacerlo con la sintaxis de matriz de PHP. Sobreescribiré los valores. Por ejemplo:
$conditions['OR'] = array(
'Model.related_string' => array('', 0),
'Model.related_string' => NULL);
Fracaso. Esto solo buscará entradas NULL cuando se sobrescriba el valor de la clave 'Model.related_string'. ¿Estoy atrapado escribiendo dos hallazgos?
http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_in "Para cumplir con el estándar SQL, IN devuelve NULL no solo si la expresión en el lado izquierdo es NULL, pero también si no se encuentra ninguna coincidencia en la lista y una de las expresiones en la lista es NULL. " – Paolo