Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL WHERE IN Query - ORDER BY Match

Jeśli dobrze rozumiem, chcesz posortować wyniki według liczby dopasowań w kolejności malejącej. Aby to zrobić, możesz spróbować:

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

A jeśli chcesz filmy spełniające wszystkie kryteria, możesz użyć:

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

AKTUALIZACJA:

To najlepsze, co mogę zrobić w MySQL. Nie możesz użyć IN, ponieważ nie możesz wyodrębnić informacji o kolejności filtrów. Jeśli dodasz tabelę pochodną jako sposób filtrowania, możesz dołączyć te informacje i użyć ich do wyświetlenia wyników według dopasowań pozycyjnych. Pamiętaj, że nie podajesz żadnych informacji o kolejności w tabeli gatunek_rel, więc tak naprawdę nie wiesz, jak ważne są gatunki na film. To zapytanie wyświetli pasujące filmy według malejącej kolejności ważności gatunków w kryteriach:

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

Pamiętaj, że wszystkie filmy z wyjątkiem 5 należą do wszystkich 3 gatunków. Jeśli dodasz kolumnę do gatunek_rel reprezentującą kolejność ważności, możesz wymyślić trochę matematyki (waga - ważność lub coś podobnego).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd łącznika MySQL Wartość strefy czasowej serwera Czas środkowoeuropejski

  2. Użyj relacyjnych baz danych MySQL na Ubuntu 8.04 (Hardy)

  3. SQLSTATE[HY000] [2005] Nieznany host serwera MySQL 'mysql1.alwaysdata.com:3306' (2)

  4. Filtruj zapytania django według znaków Unicode 🐲 lub 💎 itp

  5. Problem z Javą + Mysql UTF8