Zend Выберите NOT IN

У меня есть две таблицы со связанными данными, и я хочу выбрать все записи из одной таблицы, которых нет в другой таблице, а также некоторые другие критерии в соответствующей таблице, как показано ниже (123 для иллюстрации):

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?

Вы можете запустить прямой 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); 

EDIT : Чтобы ответить, можно ли это сделать с помощью обозначения объекта, да:

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