2010-03-10 20 views
6

Zend'de DbTable/model/mapper yapısını kullanarak 2 tabloya katılmayı deniyorum. , benim eşleştiricisindeki, bunu yaparsanız:Zend_Db_Table içinde "NULL" İşe yaramıyor. Çalışmayı seç

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

bir cazibe gibi çalışır, ama bunun yerine DEĞİL NULL IS NULL ile aynı şeyi denerseniz, ben bir sonuç kümesini almalısınız hiçbir şey elde Ben Zend benim IS NULL izlenim sevmez olsun

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

ile MySQL doğrudan denemek veya yanlış bir şey yapıyorum zaman birkaç satır, tıpkı?

+2

Zend_Debug :: dump ($ select -> __ toString()) dosyasını denediniz; oluşturduğu sql görmek için? Bu sql-deyimini mysql'ye yapıştırırsanız, doğru sonuçları alır mısın? Değilse, elle yazılan sürümden farklı olan nedir? – PatrikAkerstrand

+0

Teşekkür ederim Makine! Bunu yaparak Zend'in ihtiyacım olan sol birleştirme yerine bir iç birleştirme yarattığını keşfettim. Yani -> joinLeft() kullanarak benim sorun çözüldü. – Peter

cevap

13

çözüm benim orijinal yayındaki Makine'nin açıklamada bulunmak oldu. o ben o yüzden yanlış seçme yöntemi kullanılarak olduğu gibi Zend bir iç birleşim yarattığı fark önerdi yapmak:

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

olması gerektiği nasıl.

+0

@Peter - bunu doğru cevap olarak işaretlemelisiniz :) – karim79

+0

@Karim, Yapamam! 2 gün boyunca değil. Stackoverflow sadece 2 gün sonra kendi cevabınızı kabul etmenizi sağlar. :) – Peter

2

Düşüncem, MySQL'in NULL ve neyin neyin olmadığını belirleme biçimiyle ilgilidir. Beklediğiniz sonuçlarınsütununda boş dize '' veya 0 varsayılan ataması var mı? MySql, 'u değil, NULL olarak kabul eder. Burada göz atın:

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

+0

Hey Karim, Girdi için teşekkürler, ama bu sütunda NULL değil, '' ya da 0, kontrol ettim ve sadece iki kez kontrol ettim. Şu anda Makinenin yorumunu takip ediyor, bir şey üzerinde. – Peter

İlgili konular