Chciałbym odfiltrować określone pola w mojej bazie danych, które mają wartość Null, 0 lub "". Niestety, używanie NULL w warunku IN nie zwraca niczego ... Sądzę, że wynika to z NULL porównań w SQL, które są oceniane jako NIEZNANE. Na przykład:Używanie funkcji find i null podczas wyświetlania innych wartości
$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')
)
);
to zawsze zwraca żadnych błędów i zero wierszy, ponieważ uzyskana zapytania ma SELECT ... WHERE 'Model'.'related_string' IN (NULL, 0, '')
. Jednak jeśli chcę OR oddzielnie dla NULL, nie mogę tego zrobić przy użyciu składni macierzy PHP. Nadpisam wartości. Na przykład:
$conditions['OR'] = array(
'Model.related_string' => array('', 0),
'Model.related_string' => NULL);
Niepowodzenie. Będzie wyszukiwać tylko wpisy NULL, gdy wartość dla klucza "Model.related_string" zostanie nadpisana. Czy utknąłem, pisząc dwa znaleziska?
http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_in "Aby zachować zgodność ze standardem SQL, IN zwraca NULL nie tylko jeśli wyrażenie po lewej stronie ma wartość NULL, ale także, jeśli nie znaleziono żadnego dopasowania na liście, a jedno z wyrażeń na liście ma wartość NULL. " – Paolo