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

MySQL WHERE IN Query - ORDER BY Match

Jika saya mengerti dengan benar, Anda ingin mengurutkan hasil berdasarkan jumlah kecocokan dalam urutan menurun. Untuk melakukannya, Anda dapat mencoba:

SELECT movie
  FROM genre_rel 
 WHERE genre IN (1, 8, 3) 
 GROUP BY movie
 order by count(movie) desc

Dan jika Anda menginginkan film yang cocok dengan semua kriteria, Anda dapat menggunakan:

SELECT movie
  FROM genre_rel 
 WHERE genre IN (1, 8, 3) 
 GROUP BY movie
HAVING count(movie) = 3

PEMBARUAN:

Ini adalah yang terbaik yang bisa saya lakukan di MySql. Anda tidak dapat menggunakan IN karena Anda tidak dapat mengekstrak informasi tentang urutan filter. Jika Anda menambahkan tabel turunan sebagai sarana pemfilteran, Anda dapat menambahkan informasi ini dan menggunakannya untuk menampilkan hasil berdasarkan kecocokan posisi. Perhatikan bahwa Anda tidak memberikan info pemesanan apa pun di tabel genre_rel sehingga Anda tidak benar-benar mengetahui pentingnya genre per film. Kueri ini akan memberi Anda film yang cocok berdasarkan urutan kepentingan genre dalam kriteria:

SELECT movie
  FROM genre_rel 
  INNER join
  (
     select 1 genre, 1000 weight
     union all
     select 8, 100
     union all
     select 3, 10
  ) weights
 on genre_rel.genre = weights.genre
 GROUP BY movie
 order by sum(weight) desc

Perhatikan bahwa semua film kecuali 5 termasuk dalam 3 genre. Jika Anda menambahkan kolom ke genre_rel yang mewakili urutan kepentingan, Anda dapat merancang beberapa matematika (bobot - kepentingan atau yang serupa).



  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 Banyak hitungan dalam satu kueri dengan case

  2. Melewati nilai yang diambil dari database ke halaman lain menggunakan php dan mysql

  3. Grup codeigniter oleh dan buat array multidimensi

  4. partisi otomatis database mysql

  5. Pertandingan teks lengkap () terhadap () mengembalikan set kosong