Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Cekap Melakukan WHERE ... IN Subquery dengan Doktrin 2?

Bagaimana untuk Cekap Melakukan WHERE ... IN Subquery dengan Doktrin 2?

Susan Sarandon
Lepaskan: 2025-01-13 21:36:45
asal
559 orang telah melayarinya

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

Mengoptimumkan WHERE ... IN Subkueri dalam Ajaran 2

Mendapatkan semula item pesanan yang dikaitkan dengan pesanan yang mengandungi item tertentu memberikan cabaran dalam rangka kerja Doktrin 2. Penyelesaian SQL yang mudah kelihatan seperti ini:

<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>
Salin selepas log masuk

Pertanyaan SQL ini mencapai hasil yang diinginkan dengan cekap. Walau bagaimanapun, mereplikasi ini terus dalam pembina pertanyaan Doktrin 2 memerlukan pendekatan yang lebih bernuansa:

<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>
Salin selepas log masuk

Kod Doktrin 2 ini menyediakan persamaan fungsian. Ambil perhatian bahawa pelarasan khusus model mungkin diperlukan. Bidang untuk pemurnian berpotensi termasuk mengoptimumkan prestasi klausa IN dengan subkueri, meneroka alternatif untuk meningkatkan kecekapan dan berpotensi menyatukan dua parameter menjadi satu untuk kebolehbacaan yang lebih baik. Contoh ini berfungsi sebagai asas untuk mencipta penyelesaian yang mantap dan cekap.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Melakukan WHERE ... IN Subquery dengan Doktrin 2?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan