Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête WHERE IN MySQL - Correspondance ORDER BY

Si je comprends bien, vous voulez trier les résultats par nombre de correspondances dans l'ordre décroissant. Pour ce faire, vous pouvez essayer :

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

Et si vous voulez des films qui correspondent à tous les critères, vous pouvez utiliser :

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

MISE À JOUR :

C'est le mieux que je puisse faire dans MySql. Vous ne pouvez pas utiliser IN car vous ne pouvez pas extraire d'informations sur l'ordre des filtres. Si vous ajoutez une table dérivée comme moyen de filtrage, vous pouvez ajouter ces informations et les utiliser pour afficher les résultats par correspondances de position. Notez que vous ne fournissez aucune information de commande dans la table genre_rel, vous ne connaissez donc pas vraiment l'importance des genres par film. Cette requête vous donnera des films correspondants par ordre décroissant d'importance des genres dans les critères :

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

Notez que tous les films sauf 5 appartiennent aux 3 genres. Si vous ajoutez une colonne à genre_rel représentant l'ordre d'importance, vous pourriez concevoir des mathématiques (poids - importance ou quelque chose de similaire).