5

我有一些 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)

帮助将不胜感激。干杯:)

4

4 回答 4

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"));
于 2009-11-12T17:57:41.303 回答
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)
");
于 2009-11-12T07:32:19.963 回答
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')
于 2012-04-20T17:18:49.260 回答
0

我也试试你的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);

我认为这段代码比其他代码更具可读性和简单性。

于 2011-11-24T09:34:52.647 回答