sql >> Database >  >> RDS >> Mysql

Symfony2 - Doctrine2 QueryBuilder WAAR IN ManyToMany-veld

Voor uw oplossing kunt u gebruik maken van COUNT(DISTINCT) met HAVING en GROUP BY clausules

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();
}

In bovenstaande zoekopdracht heb ik nog een selectie toegevoegd om verschillende service-ID's voor elk hotel te tellen, d.w.z.

Dan heb ik ook een groep nodig voor die telling, dus ik heb toegevoegd

Nu komt het lastige deel, zoals je al zei, dat je een hotel nodig hebt met alle service-ID's zoals ids (1,2,3), dus hotels die deze 3 services bevatten, moeten worden geretourneerd wanneer we deze gebruiken voor prestaties of bewerkingen zoals where servid_id = 1 or servid_id = 2 servid_id = 3 wat precies is dat je de AND . niet wilt operatie dat hotel deze 3 moet hebben, dus ik heb deze logica omgezet door een deel te hebben

Nu total_services is een virtuele alias voor de zoekopdracht en bevat de afzonderlijke telling voor elk hotel, dus ik heb deze telling vergeleken met de telling van de verstrekte ID's in IN() deel dit zal de hotels retourneren die deze services moeten bevatten

GROUP BY and HAVING Clause




  1. Onbekende kolom in 'veldlijst' wanneer de tijdelijke aanduiding van de voorbereide instructie zich in de subquery bevindt

  2. Hoe upload ik Excel of CSV naar de MySQL-database met behulp van PHP?

  3. CREATE TABLE in SQL - Alles wat u moet weten over het maken van tabellen in SQL

  4. Hoe maak je een PL/SQL-functie in Oracle Database?