tipos subconsultas solo registros otro ejemplos dentro cómo consultas concatenar con complejas campo anidadas sql symfony1 doctrine symfony-1.4 doctrine-1.2

solo - subconsultas sql pdf



doctrina de cómo escribir WhereIn() con otra consulta sql dentro (2)

Por lo general, harías algo como:

$q = Doctrine_Query::create() ->from(''User u'') ->whereIn(''u.id'', array(1, 2, 3));

Pero creo que este se ajusta mejor a tus necesidades:

$q = Doctrine_Query::create() ->from(''Foo f'') ->where(''f.group_id IN (SELECT f.group_id FROM Alert a WHERE a.monitor_id = ?)'', 4);

Tengo la siguiente consulta en SQL

... where group_id IN (select group_id from alert where monitor_id = 4);

Quiero escribirlo en Doctrine, pero no sé cómo agregar la selección IN en la cláusula WHEREIN (). alguna idea ?

Esto es lo que hice

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

En el 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(); }


Una solución posible: select group_id from alert where monitor_id = 4 en una matriz y utilícelo en whereIn

$q = Doctrine_Query::create()->from("alert a")->where("a.monitor_id", 4); $groups_raw = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY); $groups = array(); foreach ($groups_raw as $gr){ $groups[] = $gr->id; } $q2 = Doctrine_Query::create()->from("table t")->whereIn("t.group_id", $groups);

Dos consultas en lugar de una, pero definitivamente hacen el truco.