Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL WHERE IN Query - ORDER BY Match


Se entendi corretamente, você deseja classificar os resultados por número de correspondências em ordem decrescente. Para fazer isso, você pode tentar:
SELECT movie
  FROM genre_rel 
 WHERE genre IN (1, 8, 3) 
 GROUP BY movie
 order by count(movie) desc

E se você quiser filmes que correspondam a todos os critérios, você pode usar:
SELECT movie
  FROM genre_rel 
 WHERE genre IN (1, 8, 3) 
 GROUP BY movie
HAVING count(movie) = 3

ATUALIZAR:

Este é o melhor que posso fazer no MySql. Você não pode usar IN porque não pode extrair informações sobre a ordem dos filtros. Se você adicionar uma tabela derivada como meio de filtragem, poderá anexar essas informações e usá-las para mostrar resultados por correspondências posicionais. Observe que você não fornece nenhuma informação de pedido na tabela gender_rel para que você realmente não saiba a importância dos gêneros por filme. Esta consulta fornecerá os filmes correspondentes por ordem decrescente de importância dos gêneros nos critérios:
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

Observe que todos os filmes, exceto 5, pertencem a todos os 3 gêneros. Se você adicionar uma coluna ao gênero_rel representando a ordem de importância, poderá criar alguma matemática (peso - importância ou algo semelhante).