Mysql
 sql >> база данни >  >> RDS >> Mysql

Нуждаете се от помощ с SQL за класиране на резултатите от търсенето

Намерих работещо решение на горния проблем и го публикувам тук, в случай че някой друг има подобен проблем.

Решението е да използвате под-селекция, вместо изявление за case. Ето по-горното разделяне на кода, коригирано. (Не знам дали това е най-доброто или най-ефективното решение, но засега отстрани проблема за мен и изглежда връща резултати от търсенето сравнително бързо.)

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. MySQL Подреждане по число, Празни низове (или 0) Последни

  2. Как да изберете колона с помощта на Hibernate?

  3. Как да получите остатък с помощта на MOD() в PostgreSQL, MS SQL Server и MySQL

  4. Експортирайте MySQL данни в .csv с помощта на PHP

  5. Как да сортирате в SQL, игнорирайки статии ('the, a', an и т.н.)