sql >> Database teknologi >  >> RDS >> Mysql

MySQL WHERE IN Query - BESTIL EFTER Match

Hvis jeg forstår det rigtigt, vil du sortere resultaterne efter antal matches i faldende rækkefølge. For at gøre det kan du prøve:

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

Og hvis du vil have film, der matcher alle kriterierne, kan du bruge:

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

OPDATERING:

Dette er det bedste, jeg kan gøre i MySql. Du kan ikke bruge IN, fordi du ikke kan udtrække information om rækkefølge af filtre. Hvis du tilføjer afledte tabel som et middel til filtrering, kan du tilføje disse oplysninger og bruge dem til at vise resultater efter positionelle matches. Bemærk, at du ikke angiver bestillingsoplysninger i genre_rel-tabellen, så du ved ikke rigtig vigtigheden af ​​genrer pr. film. Denne forespørgsel giver dig matchende film efter faldende rækkefølge efter vigtighed af genrer i kriterier:

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

Bemærk at alle filmene undtagen 5 tilhører alle 3 genrer. Hvis du tilføjer en kolonne til genre_rel, der repræsenterer rækkefølge af betydning, kan du måske udtænke noget matematik (vægt - vigtighed eller noget lignende).



  1. ADDDATE() vs DATE_ADD() i MySQL:Hvad er forskellen?

  2. Canonical Function EntityFunctions.TruncateTime findes ikke i MYSQL

  3. Hvordan kan jeg indstille standardværdien for en tidsstempelkolonne til det aktuelle tidsstempel med Laravel-migreringer?

  4. Ring til flere lagrede procedurer med Zend Framework