Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Doctrine2 DBAL क्वेरी मौजूद है

कुछ साल देर से, लेकिन आपको अपना EXISTS specify निर्दिष्ट करना होगा SELECT . के भीतर सबक्वेरी SQL या WHERE पैरामीटर का उपयोग करने के विपरीत QueryBuilder का कथन भाग।

इसके अतिरिक्त order . के बाद से MySQL में एक आरक्षित शब्द है, आपको पहचानकर्ता उद्धरणों का उपयोग करने की आवश्यकता होगी ` (बैक-टिक) टेबल के नाम से बचने के लिए।

ओआरएम का उपयोग करते समय; आपको एक FROM . निर्दिष्ट करना होगा बयान जो एक इकाई का संदर्भ देता है, इसलिए आपको अपना दृष्टिकोण बदलना होगा।

$connection = $this->em->getConnection();
$expr = $connection->getExpressionBuilder();
$qbSub = $connection->createQueryBuilder()
    ->select(['1'])
    ->from('`order`', 'o')
    ->leftJoin('o', '`payment`', 'p', $exor->eq('p.order_id', 'o.id'))
    ->where($expr->isNull('p.id'));

/**
 * @return string "1" if a record exists, "0" otherwise
 */
$connection->createQueryBuilder()
    ->select('EXISTS(' . $qbSub->getSQL() . ')')
    ->execute()
    ->fetchColumn();
$qb
    ->setParameter('name', $value)
    ->execute();

परिणामस्वरूप SQL

SELECT EXISTS(
   SELECT 1
   FROM `order` AS o
   LEFT JOIN `payment` AS p
   ON p.order_id = o.id
   WHERE p.id IS NULL
);

हालांकि, मेरा सुझाव है कि आप अपनी क्वेरी को बहिष्करण जॉइन से NOT EXISTS . के साथ एक समावेशन में शामिल करें . ऐसा करने से भुगतान किए गए आदेशों को आपके परिणाम-सेट से फ़िल्टर कर दिया जाएगा। प्रत्येक भुगतान पर प्रत्येक आदेश में शामिल होने का प्रयास करने के बजाय और उन भुगतानों को पुनः प्राप्त करें जो null . लौटाते हैं . क्वेरी के प्रदर्शन में नाटकीय रूप से सुधार करना।

उदाहरण db-fiddle

SELECT EXISTS (
    SELECT 1
    FROM `order` AS o2
    WHERE NOT EXISTS(
        SELECT NULL
        FROM `order` AS o
        INNER JOIN `payment` AS p
        ON p.order_id = o.id
        WHERE o2.id = o.id
    )
)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कुछ वाइल्डकार्ड से मेल खाने वाले MySQL डेटाबेस ड्रॉप करें?

  2. @PersistenceContext का उपयोग कर अशक्त EntityManager

  3. सदस्य के नाम से mySQL समूह

  4. MySQL INSERT IF (कस्टम अगर स्टेटमेंट)

  5. एक ही मॉडल केकेपीएचपी से कई संबंध