Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL WHERE TRONG Truy vấn - ĐẶT HÀNG THEO Khớp

Nếu tôi hiểu đúng, bạn muốn sắp xếp kết quả theo số lượng kết quả phù hợp theo thứ tự giảm dần. Để làm như vậy, bạn có thể thử:

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

Và nếu bạn muốn phim phù hợp với tất cả các tiêu chí, bạn có thể sử dụng:

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

CẬP NHẬT:

Đây là điều tốt nhất tôi có thể làm trong MySql. Bạn không thể sử dụng IN vì bạn không thể trích xuất thông tin về thứ tự của các bộ lọc. Nếu bạn thêm bảng dẫn xuất làm phương tiện lọc, bạn có thể thêm thông tin này và sử dụng nó để hiển thị kết quả theo vị trí đối sánh. Lưu ý rằng bạn không cung cấp bất kỳ thông tin đặt hàng nào trong bảng Category_rel, vì vậy bạn không thực sự biết tầm quan trọng của các thể loại trên mỗi phim. Truy vấn này sẽ cung cấp cho bạn các bộ phim phù hợp theo thứ tự giảm dần mức độ quan trọng của các thể loại trong tiêu 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

Lưu ý rằng tất cả các phim ngoại trừ 5 đều thuộc cả 3 thể loại. Nếu bạn thêm một cột vào category_rel đại diện cho thứ tự quan trọng, bạn có thể nghĩ ra một số phép toán (trọng số - tầm quan trọng hoặc một cái gì đó tương tự).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để giải thích một truy vấn có các tham số trong MySQL

  2. Truy vấn phức tạp + Tập lệnh phân trang

  3. Nhúng mysql vào ứng dụng java trên máy tính để bàn

  4. mysql:cách cắt bớt độ dài của một trường

  5. Cách chuẩn hóa cơ sở dữ liệu SQL