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

Symfony2 - Doctrine2 QueryBuilder जहां कई क्षेत्रों में है

अपने समाधान के लिए आप COUNT(DISTINCT) . का उपयोग कर सकते हैं HAVING . के साथ और GROUP BY खंड

public function findByServices($services)
{
    $qb = $this->createQueryBuilder('hotel')
        ->addSelect('location')
        ->addSelect('country')
        ->addSelect('billing')
        ->addSelect('services')
        ->addSelect('COUNT(DISTINCT  services.id) AS total_services')
        ->innerJoin('hotel.billing', 'billing')
        ->innerJoin('hotel.location', 'location')
        ->innerJoin('location.city', 'city')
        ->innerJoin('location.country', 'country')
        ->innerJoin('hotel.services', 'services');
    $i = 0;
    $arrayIds = array();
    foreach ($services as $service) {
        $arrayIds[$i++] = $service->getId();
    }
    $qb->add('where', $qb->expr()->in('services', $arrayIds))
        ->addGroupBy('hotel.id')
        ->having('total_services = '.count($arrayIds))
        ->getQuery();
}

उपरोक्त क्वेरी में मैंने प्रत्येक होटल के लिए अलग-अलग सेवा आईडी की गिनती के रूप में एक और चयन जोड़ा है, अर्थात

फिर मुझे उस गिनती के लिए एक समूह की भी आवश्यकता है इसलिए मैंने जोड़ा

अब यहां मुश्किल हिस्सा आता है जैसा कि आपने उल्लेख किया है कि आपको ऐसे होटल की आवश्यकता है जिसमें आईडी (1,2,3) जैसी सभी सेवा आईडी हों, इसलिए जब हम इसके प्रदर्शन या संचालन में उपयोग करते हैं तो इन 3 सेवाओं वाले होटलों को वापस कर दिया जाना चाहिए जैसे where servid_id = 1 or servid_id = 2 servid_id = 3 जो वास्तव में आप नहीं चाहते AND ऑपरेशन कि होटल में ये 3 होने चाहिए इसलिए मैंने इस तर्क को भाग

. में परिवर्तित कर दिया

अब total_services क्वेरी के लिए वर्चुअल उपनाम है और प्रत्येक होटल के लिए अलग-अलग गिनती रखता है इसलिए मैंने इस गिनती की तुलना IN() में प्रदान की गई आईडी की गिनती से की है भाग यह उन होटलों को लौटा देगा जिनमें ये सेवाएं शामिल होनी चाहिए

GROUP BY and HAVING Clause




  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. mysql डेटा का स्वचालित या नियमित बैकअप

  3. MySQL उपयोगकर्ता पहुंच - तालिका विशिष्ट

  4. MySQL/हाइबरनेट - मैं एक MySQL पूल किए गए कनेक्शन को कैसे डिबग कर सकता हूं जो गिरता रहता है?

  5. PHP/MySQL - सरणी डेटा को JSON के रूप में संग्रहीत करना, खराब अभ्यास?