Zend_Db_Table中的“IS NULL”选择不起作用

时间:2010-03-10 14:44:28

标签: mysql zend-framework null zend-db-table

我正在尝试使用DbTable / model / mapper结构在Zend中对2个表进行连接。 如果,在我的映射器中,我这样做:

$select = $this->getDbTable()->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
        ->setIntegrityCheck(false)
        ->join('images', 'images.oldFilename =
                                               availablePictures.filename')
               ->where('images.ref IS NOT NULL');
$resultSet = $this->getDbTable()->fetchAll( $select );

它就像一个魅力,但如果我用IS NULL而不是NOT NULL尝试相同的东西,我什么也得不到我应该得到几行的结果集,就像我在MySQL中直接尝试

SELECT *
FROM (
`availablePictures` AS a
LEFT JOIN `images` AS i ON a.filename = i.oldFilename
)
WHERE i.`ref` IS NULL

我得到印象Zend不喜欢我的IS NULL或我做错了什么?

2 个答案:

答案 0 :(得分:13)

解决方案可以在Machine对我原帖的评论中找到。 按照他的建议我注意到Zend创建了一个内连接,因为我使用了错误的select方法,所以:

$select = $this->getDbTable()->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
        ->setIntegrityCheck(false)
        ->joinLeft('images', 'images.oldFilename =
                                               availablePictures.filename')
               ->where('images.ref IS NOT NULL');
$resultSet = $this->getDbTable()->fetchAll( $select );

应该如何。

答案 1 :(得分:2)

我的想法是它与MySql决定什么是NULL以及什么不是什么的方式有关。您期望的结果是否可能在''列中具有空字符串0images.ref的默认分配? MySql 将这些视为NULL。看看这里:

http://dev.mysql.com/doc/refman/4.1/en/working-with-null.html