2009-11-11 18 views
5

Mam pewne SQL, którego chcę używać z ZendFW, ale nie mogę go uruchomić działa i doprowadza mnie do szału. Otrzymuję prawidłowy wynik w tym zapytaniu:Zend_Db_Table podzapytanie

SELECT DISTINCT e.festival_id FROM entries AS e, mail_log as m 
WHERE e.status = 1 
AND e.festival_id 
NOT IN (SELECT m.entry_id FROM entries AS e, mail_log as m WHERE m.entry_id = e.festival_id) 

Pomoc byłaby doceniana. Pozdrawiam :)

Odpowiedz

6

Nie jestem pewien, czy Zend_Db_Table jest w stanie obsłużyć podzapytania.

Dlaczego musisz używać Zend_Db_Table?

Możesz wykonać zapytanie bezpośrednio za pomocą Zend_Db :: query().

$db = Zend_Db_Table::getDefaultAdapter(); 
$db->query("SELECT DISTINCT e.festival_id FROM entries AS e, mail_log as m 
    WHERE e.status = 1 
    AND e.festival_id 
    NOT IN (SELECT m.entry_id FROM entries AS e, mail_log as m WHERE m.entry_id = e.festival_id) 
"); 
+0

Może obsługiwać subqueires w params o charakterze sprowadzić. Ale to, co próbuje zrobić przy użyciu adaptera db, to właściwe podejście. – smack0007

11

Odpowiedź Gorana jest najlepszą odpowiedzią. Ale jeśli chcesz zapytanie stylu Zend_Db_Table, to byłaby alternatywa:

$sql = $table->select() 
      ->setIntegrityCheck(false) 
      ->from('entries', new Zend_Db_Expr('DISTINCT festival')) 
      ->where('status = ?', 1) 
      ->where('festival_id NOT IN (?)',new Zend_Db_Expr("SELECT m.entry_id FROM entries AS e, mail_log as m WHERE m.entry_id = e.festival_id")); 
0

ja też wypróbować sql.This jest mój kod.

$select = $db->select() 
     ->from(array('e' => ' entries'), array('festival_id')) 
     ->distinct(true) 
     ->where('e.status =?', 1) 
     ->where('e.festival_id NOT IN (SELECT m.entry_id FROM entries AS e, mail_log as m WHERE m.entry_id = e.festival_id)') 
     ->setIntegrityCheck(false); 

Myślę, że ten kod jest bardziej czytelny i prosty niż inne.

4

W moim przypadku to działa:

$subselect = $db->select() 
    ->from(array('u1' => 'users'), 'departmentId') 
    ->joinInner(array('d' => 'demand'), 'u1.userId = d.adminId', null) 
    ->where('d.demandId = ?', $demand->getId()); 

$select2 = $db->select() 
    ->from(array('u' => 'users')) 
    ->where('u.departmentId = ?', $subselect); 

Wynik był następujący:

SELECT `u`.* FROM `users` AS `u` WHERE u.departmentId = (SELECT `u1`.`departmentId` FROM `users` AS `u1` INNER JOIN `demand` AS `d` ON u1.userId = d.adminId WHERE d.demandId = '1')