Heim > Datenbank > MySQL-Tutorial > Wie führt man mit Doctrine 2 effizient eine WHERE ... IN-Unterabfrage durch?

Wie führt man mit Doctrine 2 effizient eine WHERE ... IN-Unterabfrage durch?

Susan Sarandon
Freigeben: 2025-01-13 21:36:45
Original
559 Leute haben es durchsucht

How to Efficiently Perform a WHERE ... IN Subquery with Doctrine 2?

Optimierung von WHERE ... INUnterabfragen in Lehre 2

Das Abrufen von Bestellpositionen, die mit Bestellungen verknüpft sind, die einen bestimmten Artikel enthalten, stellt im Rahmen von Doctrine 2 eine Herausforderung dar. Eine einfache SQL-Lösung sieht so aus:

<code class="language-sql">SELECT DISTINCT i.id, i.name, order.name 
FROM items i 
JOIN orders o ON i.order_id=o.id 
WHERE o.id IN (
   SELECT o2.id FROM orders o2
   JOIN items i2 ON i2.order_id=o2.id AND i2.id=5
)
AND i.id != 5
ORDER BY o.orderdate DESC
LIMIT 10</code>
Nach dem Login kopieren

Diese SQL-Abfrage erzielt effizient das gewünschte Ergebnis. Die direkte Replikation im Abfrage-Builder von Doctrine 2 erfordert jedoch einen differenzierteren Ansatz:

<code class="language-php">$expr = $em->getExpressionBuilder();
$em->createQueryBuilder()
   ->select(array('DISTINCT i.id', 'i.name', 'o.name'))
   ->from('Item', 'i')
   ->join('i.order', 'o')
   ->where(
       $expr->in(
           'o.id',
           $em->createQueryBuilder()
               ->select('o2.id')
               ->from('Order', 'o2')
               ->join('Item', 'i2', \Doctrine\ORM\Query\Expr\Join::WITH, $expr->andX(
                   $expr->eq('i2.order', 'o2'),
                   $expr->eq('i2.id', '?1')
               ))
               ->getDQL()
       )
   )
   ->andWhere($expr->neq('i.id', '?2'))
   ->orderBy('o.orderdate', 'DESC')
   ->setParameter(1, 5)
   ->setParameter(2, 5);</code>
Nach dem Login kopieren

Dieser Doctrine 2-Code bietet ein funktionales Äquivalent. Beachten Sie, dass modellspezifische Anpassungen erforderlich sein können. Bereiche für mögliche Verbesserungen umfassen die Optimierung der Leistung der IN-Klausel mit Unterabfragen, die Untersuchung von Alternativen zur Verbesserung der Effizienz und möglicherweise die Konsolidierung der beiden Parameter in einem für eine bessere Lesbarkeit. Dieses Beispiel dient als Grundlage für die Erstellung einer robusten und effizienten Lösung.

Das obige ist der detaillierte Inhalt vonWie führt man mit Doctrine 2 effizient eine WHERE ... IN-Unterabfrage durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage