Lehre Sie, wie zu schreiben, Wobei() mit einem sql-Abfrage in

ich habe folgende Abfrage in SQL

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

Ich schreiben wollen, es in der Lehre aber ich weiß nicht, wie Sie die IN der select-into-WOBEI () - Klausel !
irgendeine Idee ?

dies ist, was ich getan habe

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

In der 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();
    }
  • nicht im Zusammenhang mit der eigentlichen Frage aber, um die Nutzung dieser Abfrage: Welches RDBMS verwendest du?
  • Verwenden Sie Symfony-1.4 mit Doctrine 1.2 oder sind Sie mit Symfony2 mit doctrine2? (verwirrend-tags)
  • Symfony-1.4 mit Doctrine 1.2
  • ich benutze mySQL....
  • Sind, dass // before ->aus('sf_guard_user u')` relevant?
  • Betrachten Sie nach dem umschreiben des die Abfrage mit JOIN oder noch besser mit WHERE EXISTS als mit IN. MySQL ist Ausführungsplan für x IN (SELECT y FROM z) ist bekanntlich nicht optimal. Es ist nicht sehr schlimm, wenn Ihre Tabellen sind kleiner (in Anzahl der Datensätze), aber wenn Sie groß sind, werden Sie bemerken den Unterschied in der Geschwindigkeit.

InformationsquelleAutor ProXamer | 2011-08-26
Schreibe einen Kommentar