sql >> Databáze >  >> RDS >> Mysql

MySQL WHERE IN Query - ORDER BY Match

Pokud tomu dobře rozumím, chcete výsledky seřadit podle počtu shod v sestupném pořadí. Chcete-li to provést, můžete zkusit:

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

A pokud chcete filmy, které splňují všechna kritéria, můžete použít:

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

AKTUALIZACE:

To je to nejlepší, co mohu v MySql udělat. Nemůžete použít IN, protože nemůžete extrahovat informace o pořadí filtrů. Pokud přidáte odvozenou tabulku jako prostředek filtrování, můžete tyto informace připojit a použít je k zobrazení výsledků podle pozičních shod. Všimněte si, že v tabulce žánru_rel neuvádíte žádné informace o objednání, takže vlastně neznáte důležitost žánrů na film. Tento dotaz vám poskytne odpovídající filmy v sestupném pořadí podle důležitosti žánrů v kritériích:

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

Všimněte si, že všechny filmy kromě 5 patří do všech 3 žánrů. Pokud do žánru_rel přidáte sloupec představující pořadí důležitosti, můžete navrhnout nějakou matematiku (váha - důležitost nebo něco podobného).



  1. Zálohujte/obnovte databázi SQLlite do složky aplikace Disk Google

  2. MySQL:vyberte položky, které nejsou v seznamu

  3. Dotaz MySQL pro určité časové období

  4. Mysql nekonzistentní počet řádků count(*) vs. table.table_rows v information_schema