Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend_Db_表子查询_Php_Zend Framework_Subquery_Zend Db Table - Fatal编程技术网

Php Zend_Db_表子查询

Php Zend_Db_表子查询,php,zend-framework,subquery,zend-db-table,Php,Zend Framework,Subquery,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)

我有一些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_表是否能够处理子查询

为什么需要使用Zend_Db_表

您可以使用Zend_Db::query()直接执行查询


戈兰的答案是最好的答案。但是,如果您想要zend_db_表样式的查询,这将是另一种选择:

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

我也尝试使用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);

我认为这段代码比其他代码更可读、更简单

在我的例子中,这是有效的:

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

它可以处理fetch参数中的子问题。但是对于他尝试使用db适配器所做的事情来说,这是正确的方法。
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')