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

डॉक्ट्रिन क्वेरीबिल्डर:कई टूवन रिलेशनशिप जहां एक से अधिक सबएंटिटी का मिलान होना चाहिए

आप इसे सही ढंग से नहीं कर रहे हैं आप अंतिम फ़िल्टर मानों के साथ लेबल और मानों का मिलान कर रहे हैं क्योंकि प्लेसहोल्डर :label , :value प्रत्येक लूप पुनरावृत्ति के लिए क्वेरी में उपयोग किए गए अद्वितीय नहीं हैं, इसलिए लूप द्वारा उत्पन्न सभी खंड अंतिम लेबल और मान से मेल खाएंगे।

नौकरी पाने के लिए जिनकी प्रत्येक संपत्ति प्रदान किए गए फ़िल्टर से मेल खाती है, आप कुछ हद तक नीचे सिद्धांत प्रश्न की तरह लिख सकते हैं।

पहले यह सभी लेबल और मूल्यों को अलग-अलग सरणी में एकत्र करेगा और फिर यह IN() का उपयोग करके नौकरी के गुणों से मेल खाएगा। ऑपरेशन, अंत में उन नौकरियों को प्राप्त करने के लिए जिनके गुण उन सभी फ़िल्टर से मेल खाते हैं जिनकी आपको मिलान परिणामों की गणना करने के लिए एकत्रीकरण बनाने की आवश्यकता होती है और फ़िल्टर की संख्या के बराबर होनी चाहिए

$qb =  $this->getDoctrine()
            ->getRepository('AppBundle:Job')
            ->createQueryBuilder('job')
            ->innerJoin('job.properties','p');
$labels = array();
$values = array();
foreach($filters as $label => $value)
{
    $labels[] = $label;
    $values[] = $value;
}
$qb->addSelect('COUNT(DISTINCT  p.id) AS total_properties')
   ->andWhere('p.label IN (:labels)')
   ->andWhere('p.value IN (:values)')
   ->addGroupBy('job.id')
   ->having('total_properties = '.count($filters))
   ->setParameter('labels',$labels)
   ->setParameter('values',$values)
   ->getQuery()
   ->getResult();



  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 क्वेरी 1 क्वेरी में अलग-अलग गिनती के लिए दो अलग-अलग शर्तें

  2. MySQL स्टोर प्रक्रिया में पैरामीटर के रूप में तालिका भेजते समय त्रुटि

  3. mySQL - utf8 (गैर-अंग्रेज़ी) डेटा में मिलान करने वाला लैटिन (अंग्रेज़ी) फॉर्म इनपुट

  4. MySQL में नई भूमिकाओं का उपयोग करना 8

  5. क्या मेरी बड़ी mysql तालिका विफलता के लिए नियत है?