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ự).