2010-03-10 5 views
6

Ich versuche, eine Verknüpfung auf 2 Tabellen in Zend, mit der DbTable/Modell/Mapper-Struktur. Wenn in meinem Mapper, ich dies tun:"IS NULL" in Zend_Db_Table select funktioniert nicht

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

es funktioniert wie ein Charme, aber wenn ich die gleiche Sache mit IS NULL anstelle von NOT NULL versuchen, ich habe nichts bekommen, wo ich eine Ergebnismenge erhalten soll mehrere Reihen, genau wie wenn ich es direkt in MySQL versuchen, mit

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

ich den Eindruck bekommen Zend nicht meine IS NULL mag oder mache ich etwas falsch?

+2

Haben Sie Zend_Debug :: dump versucht ($ select -> __ toString()); um den sql zu sehen, den er erzeugt? Wenn Sie die sql-Anweisung in mysql einfügen, erhalten Sie dann die richtigen Ergebnisse? Wenn nicht, was unterscheidet sich von der manuell getippten Version? – PatrikAkerstrand

+0

Danke Maschine! Dabei entdeckte ich, dass Zend einen inneren Join anstelle des linken Joins, den ich brauchte, erstellte. Also, mit -> joinLeft() wurde mein Problem gelöst. – Peter

Antwort

13

Die gefundene Lösung auf meinem ursprünglichen Beitrag in Machine Kommentar werden sollte. tun, was er vorgeschlagen, dass ich bemerkt, dass Zend erstellt eine innere Verknüpfung, wie ich die falsche select-Methode wurde verwendet wird, so:

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

ist, wie es sein sollte.

+0

@Peter - Sie sollten dies als die richtige Antwort markieren :) – karim79

+0

@Karim, kann ich nicht! Nicht für 2 Tage. Stackoverflow erlaubt nur die Annahme Ihrer eigenen Antwort nach 2 Tagen. :) – Peter

2

Mein Denken ist, dass es mit der Art und Weise zu tun hat, wie MySql entscheidet, was NULL ist und was nicht. Ist es möglich, dass die von Ihnen erwarteten Ergebnisse eine Standardzuordnung der leeren Zeichenfolge '' oder 0 in der Spalte images.ref haben? MySql tut nicht behandeln Sie diese als NULL. Werfen Sie einen Blick hier:

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

+0

Hey Karim, danke für die Eingabe, aber es ist NULL in dieser Spalte, nicht "" noch 0, ich überprüft und nur doppelt überprüft. Momentan verfolgt er Machines Kommentar, er ist auf etwas. – Peter