2009-11-11 103 views
5

我有一些SQL想與ZendFW一起使用,但我無法使它工作,這讓我發瘋。我用這個查詢得到正確的結果:Zend_Db_Table子查詢

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) 

幫助將不勝感激。歡呼:)

回答

6

我不確定Zend_Db_Table是否能夠處理子查詢。

爲什麼你需要使用Zend_Db_Table?

您可以使用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

它可以在一個獲取PARAMS處理subqueires。但是,他正在嘗試使用db適配器是正確的方法。 – smack0007 2009-11-12 12:40:45

11

Goran的回答是最好的答案。但如果你想要一個zend_db_table樣式查詢,這將是一個替代方案:

$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

我也試試你sql.This是我的代碼。

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

我覺得這段代碼比其他代碼更具可讀性和簡單性。

4

在我的情況下,這個工程:

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

結果是這樣的:

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