我正在尝试使用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或我做错了什么?
答案 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以及什么不是什么的方式有关。您期望的结果是否可能在''
列中具有空字符串0
或images.ref
的默认分配? MySql 不将这些视为NULL。看看这里:
http://dev.mysql.com/doc/refman/4.1/en/working-with-null.html