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

それは魅力のように機能しますが、NOTNULLではなくISNULLで同じことを試してみると、MySQLで直接試してみる場合と同じように、複数行の結果セットを取得する必要がある場所が何も得られません。

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

ZendがISNULLを気に入らないという印象を受けますか、それとも何か間違ったことをしていますか?

4

2 に答える 2

13

解決策は、私の元の投稿に対するMachineのコメントにあります。彼が提案したことを実行すると、間違ったselectメソッドを使用していたため、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 に答える