Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Symfony2 - Doctrine2 QueryBuilder DI MANA DI bidang ManyToMany

Untuk solusi Anda, Anda dapat menggunakan COUNT(DISTINCT) dengan HAVING dan GROUP BY klausa

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

Dalam kueri di atas saya telah menambahkan satu pilihan lagi sebagai penghitungan id layanan yang berbeda untuk setiap hotel yaitu

Kemudian saya juga membutuhkan grup untuk jumlah itu jadi saya menambahkan

Sekarang inilah bagian yang sulit seperti yang Anda sebutkan bahwa Anda memerlukan hotel yang memiliki semua id layanan seperti id (1,2,3) sehingga hotel yang berisi 3 layanan ini harus dikembalikan ketika kami menggunakan dalam kinerja atau operasinya seperti where servid_id = 1 or servid_id = 2 servid_id = 3 yang sebenarnya Anda tidak inginkan AND operasi hotel itu harus memiliki 3 ini jadi saya mengubah logika ini dengan memiliki bagian

Sekarang total_services adalah alias virtual untuk kueri dan menyimpan jumlah yang berbeda untuk setiap hotel, jadi saya telah membandingkan jumlah ini dengan jumlah id yang disediakan di IN() bagian ini akan mengembalikan hotel yang harus berisi layanan ini

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. Mengapa GRANT USAGE dibuat saat pertama kali saya memberikan hak istimewa kepada pengguna?

  2. Ubah kolom MySQL menjadi AUTO_INCREMENT

  3. Kapan Class.forName diperlukan saat menghubungkan ke database melalui JDBC di aplikasi web?

  4. Tidak ada pemetaan Dialek untuk tipe JDBC:1111

  5. MySQL secara otomatis melemparkan/mengonversi string menjadi angka?