【发布时间】:2011-11-04 09:49:06
【问题描述】:
我在 SQL 中有以下查询
... where group_id IN (select group_id from alert where monitor_id = 4);
我想用 Doctrine 编写它,但我不知道如何将 IN 选择添加到 WHEREIN() 子句中! 有什么想法吗?
这就是我所做的
$q = $this->createQuery('u')
->select('u.email_address')
->distinct(true)
// ->from('sf_guard_user u')
->innerJoin('u.sfGuardUserGroup ug')
->where('ug.group_id IN(select group_id from alert where monitor_id=?',$monitor);
$q->execute();
在 sfGuardUserTable.class 中:
public function getMailsByMonitor($monitor) {
$q = Doctrine_Query::create()->from("alert a")->where("a.monitor_id", $monitor);
$groups_raw = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
$groups = array();
print_r($groups_raw);
foreach ($groups_raw as $gr) {
$groups[] = $gr->id; //line 33
}
$q2 = $this->createQuery('u')
->select('u.email_address')
->distinct(true)
->innerJoin('u.sfGuardUserGroup ug')
->whereIn("ug.group_id", $groups);
return $q2->execute();
}
【问题讨论】:
-
与实际问题无关,但与此查询的使用有关:您使用的是哪个 RDBMS?
-
你是使用 Symfony-1.4 和 Doctrine 1.2 还是使用 Symfony2 和 Doctrine2? (混淆标签)
-
Symfony-1.4 和 Doctrine 1.2
-
// before->from('sf_guard_user u')` 相关吗? -
@SymFoNyBegginer:考虑使用
JOIN重写查询,甚至使用WHERE EXISTS比使用IN更好。众所周知,MySQL 对x IN (SELECT y FROM z)的执行计划不是最优的。如果您的表很小(记录数),这还不错,但如果它们很大,您会注意到速度上的差异。
标签: sql symfony1 doctrine symfony-1.4 doctrine-1.2