Php Zend_Db_表子查询
我有一些SQL,我想与ZendFW一起使用,但我无法让它工作,这让我发疯。我通过此查询获得了正确的结果: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)
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')