我想過濾我的數據庫中的某些字段是空的,0或''。 不幸的是,在IN條件中使用NULL無法返回任何內容...我相信這是由於SQL中的NULL比較評估爲UNKNOWN。例如:使用查找和空值,而OR'ing其他值
$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')
)
);
由於生成的查詢具有SELECT ... WHERE 'Model'.'related_string' IN (NULL, 0, '')
,因此始終不返回錯誤和零行。但是,如果我想分開OR OR NULL條件,我似乎無法使用PHP的數組語法。我會覆蓋這些值。例如:
$conditions['OR'] = array(
'Model.related_string' => array('', 0),
'Model.related_string' => NULL);
失敗。這將只在'Model.related_string'鍵的值被覆蓋時搜索NULL條目。我堅持寫兩個發現?
http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_in 「爲了符合SQL標準,IN不僅返回NULL,而且如果左邊的表達式是NULL,但是如果在列表中找不到匹配,並且列表中的一個表達式爲NULL。「 – Paolo 2013-03-28 16:20:13