Подзапрос Zend_Db_Table

У меня есть некоторый SQL, который я хочу использовать с ZendFW, но я не могу заставить его работать, и это сводит меня с ума. Я получаю правильный результат с помощью этого запроса:

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) 

Помощь была бы оценена. Приветствия 🙂

Ответ Горана – лучший ответ. Но если вам нужен запрос стиля 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")); 

Я не уверен, что 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) "); 

В моем случае это работает:

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

Я также пробую вас sql.Это мой код.

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

Я считаю этот код более читабельным и простым, чем другие.