sql >> Databasteknik >  >> RDS >> Mysql

MySQL WHERE IN Query - BESTÄLLNING PER Match

Om jag förstår det rätt vill du sortera resultat efter antal matchningar i fallande ordning. För att göra det kan du försöka:

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

Och om du vill ha filmer som matchar alla kriterier kan du använda:

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

UPPDATERING:

Det här är det bästa jag kan göra i MySql. Du kan inte använda IN eftersom du inte kan extrahera information om ordningen på filter. Om du lägger till härledd tabell som ett sätt att filtrera, kan du lägga till denna information och använda den för att visa resultat efter positionsmatchningar. Observera att du inte tillhandahåller någon beställningsinformation i genre_rel-tabellen så du vet inte riktigt vikten av genrer per film. Den här frågan ger dig matchande filmer efter fallande ordning av betydelse för 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

Observera att alla filmer utom 5 tillhör alla 3 genrer. Om du lägger till en kolumn till genre_rel som representerar ordningsföljd av betydelse kan du komma på lite matematik (vikt - betydelse eller något liknande).



  1. JSON_MERGE_PRESERVE() – Slå samman flera JSON-dokument i MySQL

  2. MySQL infogar inte ett snedstreck

  3. Hur kan jag fixa det här felet:SQL92 som inte stöds?

  4. Infoga text från textarea i MySQL-databasen utan att förlora formatering