2011-03-21 44 views
7

我有兩個表與相關的數據,我想選擇一個表中不存在於另一個表中的所有記錄,以及相關表上的一些其他條件,如下所示(123只是爲了演示):Zend選擇不在

TABLE A 
    ID 
    SOMETHING 

TABLE B 
    TABLE_A_ID 
    TABLE_C_ID 
    SOMETHING 

我的查詢,直接針對數據運行,將如下

SELECT A.SOMETHING 
    FROM A 
    WHERE A.ID NOT IN (
     SELECT 
      B.TABLE_A_ID AS ID 
      FROM B 
      WHERE TABLE_C_ID = 123 
    ); 

我怎樣才能在Zend中跑的?

回答

17

您可以運行直接sql,使用$db->query();你將僅僅是:

$results = $db->query("SELECT A.SOMETHING 
FROM A 
WHERE A.ID NOT IN (
    SELECT 
     B.TABLE_A_ID AS ID 
     FROM B 
     WHERE TABLE_C_ID = ? 
)", $id); 

編輯:要回答這是否可與該對象的符號來完成的,是:

$sub_select = $zdb->select() 
        ->from("b", array("table_a_id AS id")) 
        ->where("table_c_id = ?", 'a'); 
$select = $zdb->select() 
       ->from("a", array("something")) 
       ->where("id NOT IN ?", $sub_select); 
print $select->__toString(); 

SELECT `a`.`something` FROM `a` 
WHERE (id NOT IN 
    (SELECT `b`.`table_a_id` AS `id` FROM `b` WHERE (table_c_id = 'a'))) 
+0

有沒有辦法做到這與Zend_Db_Table :: SELECT_WITH_FROM_PART? – Elie 2011-03-21 16:47:06

+0

謝謝!正是我在找什麼。 – Elie 2011-03-21 16:57:03