sql >> Database teknologi >  >> RDS >> Mysql

Har du brug for hjælp til SQL til rangering af søgeresultater

Jeg har fundet en fungerende løsning på ovenstående problem, og poster den her, hvis nogen andre oplever et lignende problem.

Løsningen er at bruge en sub-select i stedet for en case statement. Her er ovenstående afledning af kode, rettet. (Jeg ved ikke, om dette er den bedste eller mest effektive løsning, men det har løst problemerne for mig på nuværende tidspunkt og ser ud til at returnere søgeresultater rimeligt hurtigt.)

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. MySQL:SQL-fejl:1140, SQLState:42000

  2. Privat besked system. Viser sidste besked for hver samtale

  3. Sådan konverteres datetime til UTC i MySQL

  4. Kan ikke indsætte en enkelt kolonneværdi i python ved hjælp af MySQL