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

MySQL WHERE IN Query - ORDER BY Match

Se ho capito bene, vuoi ordinare i risultati per numero di corrispondenze in ordine decrescente. Per farlo, potresti provare:

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

E se desideri film che soddisfino tutti i criteri, potresti utilizzare:

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

AGGIORNAMENTO:

Questo è il meglio che posso fare in MySql. Non puoi usare IN perché non puoi estrarre informazioni sull'ordine dei filtri. Se aggiungi una tabella derivata come mezzo di filtraggio, puoi aggiungere queste informazioni e usarle per mostrare i risultati in base alle corrispondenze posizionali. Nota che non fornisci informazioni sull'ordine nella tabella gender_rel, quindi non conosci davvero l'importanza dei generi per film. Questa query ti fornirà i film corrispondenti in base all'ordine decrescente di importanza dei generi nei criteri:

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

Nota che tutti i film tranne 5 appartengono a tutti e 3 i generi. Se aggiungi una colonna a gender_rel che rappresenta l'ordine di importanza, potresti escogitare un po' di matematica (peso - importanza o qualcosa di simile).