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

Cần trợ giúp với SQL để xếp hạng kết quả tìm kiếm

Tôi đã tìm thấy một giải pháp hữu hiệu cho vấn đề trên và tôi sẽ đăng nó ở đây, trong trường hợp bất kỳ ai khác gặp phải vấn đề tương tự.

Giải pháp là sử dụng một lựa chọn con, thay vì một câu lệnh trường hợp. Đây là đoạn mã ở trên, đã được sửa chữa. (Tôi không biết đây là giải pháp tốt nhất hay hiệu quả nhất, nhưng nó đã khắc phục được rắc rối cho tôi trong lúc này và dường như trả về kết quả tìm kiếm một cách hợp lý nhanh chóng.)

SELECT 
    exercises.ID AS ID,
    exercises.title AS title, 
    (
        (
            SELECT COUNT(1) 
            FROM searchtags 
            LEFT JOIN exerciseSearchtags 
            ON exerciseSearchtags.searchtagID = searchtags.ID 
            WHERE searchtags.title LIKE CONCAT('%',?,'%') 
            AND exerciseSearchtags.exerciseID = exercises.ID
        )+
        (
            SELECT COUNT(1) 
            FROM searchtags 
            LEFT JOIN exerciseSearchtags 
            ON exerciseSearchtags.searchtagID = searchtags.ID 
            WHERE searchtags.title LIKE CONCAT('%',?,'%') 
            AND exerciseSearchtags.exerciseID = exercises.ID
        )+
        ...etc...
        (
            SELECT COUNT(1) 
            FROM searchtags 
            LEFT JOIN exerciseSearchtags 
            ON exerciseSearchtags.searchtagID = searchtags.ID 
            WHERE searchtags.title LIKE CONCAT('%',?,'%') 
            AND exerciseSearchtags.exerciseID = exercises.ID
        )
    ) AS relevance

FROM 
    exercises

LEFT JOIN exerciseSearchtags
    ON exerciseSearchtags.exerciseID = exercises.ID 

LEFT JOIN searchtags
    ON searchtags.ID = exerciseSearchtags.searchtagID

WHERE
    searchtags.title LIKE CONCAT('%',?,'%') OR
    searchtags.title LIKE CONCAT('%',?,'%') OR
    ...etc...
    searchtags.title LIKE CONCAT('%',?,'%') 

GROUP BY 
    exercises.ID                

ORDER BY 
    relevance DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Yếu tố quyết định ứng viên có đủ tốt cho BCNF không?

  2. Lỗi SQLAlchemy Máy chủ MySQL đã biến mất

  3. Giá trị auto_increment của MySQL InnoDB tăng 2 thay vì 1. Virus?

  4. Kiểm tra xem tên người dùng đã tồn tại với MySQLi chưa

  5. nội dung tệp nhị phân được hiển thị trong php print_r nhưng không được lưu trong mysql