У меня есть две таблицы со связанными данными, и я хочу выбрать все записи из одной таблицы, которых нет в другой таблице, а также некоторые другие критерии в соответствующей таблице, как показано ниже (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')))