Mysql
 sql >> база данни >  >> RDS >> Mysql

Symfony2 - Doctrine2 QueryBuilder КЪДЕ В полето ManyToMany

За вашето решение можете да използвате 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. Как да получите сумата за всяка отделна стойност в друга колона?

  2. Заключване и паралелност с MySQL

  3. pyodbc и mySQL

  4. Как мога да прочета стойността от mysql с помощта на PHP

  5. MySQL Left Joins:Изберете всичко от една таблица, но само съвпадащата стойност във втората таблица с критерии