sql >> Base de Datos >  >> RDS >> Mysql

MySQL DONDE EN Consulta - ORDEN POR Coincidencia

Si entiendo correctamente, desea ordenar los resultados por número de coincidencias en orden descendente. Para hacerlo, puede intentar:

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

Y si desea películas que cumplan con todos los criterios, puede usar:

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

ACTUALIZAR:

Esto es lo mejor que puedo hacer en MySql. No puede usar IN porque no puede extraer información sobre el orden de los filtros. Si agrega una tabla derivada como medio de filtrado, puede agregar esta información y usarla para mostrar resultados por coincidencias posicionales. Tenga en cuenta que no proporciona ninguna información de pedido en la tabla gender_rel, por lo que realmente no sabe la importancia de los géneros por película. Esta consulta le dará películas coincidentes por orden descendente de importancia de los géneros en los criterios:

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

Tenga en cuenta que todas las películas excepto 5 pertenecen a los 3 géneros. Si agrega una columna a gender_rel que representa el orden de importancia, puede idear algunas matemáticas (peso - importancia o algo similar).