6

我正在尝试使用 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 还是我做错了什么?

4

2 回答 2

13

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

$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 );

应该是这样。

于 2010-03-10T15:23:14.683 回答
2

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

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

于 2010-03-10T14:59:34.967 回答