sql >> Database >  >> RDS >> Mysql

Hulp nodig met SQL voor het rangschikken van zoekresultaten

Ik heb een werkende oplossing voor het bovenstaande probleem gevonden en plaats het hier, voor het geval iemand anders een soortgelijk probleem ervaart.

De oplossing is om een ​​sub-select te gebruiken in plaats van een case-statement. Hier is de bovenstaande ontduiking van code, gecorrigeerd. (Ik weet niet of dit de beste of meest efficiënte oplossing is, maar het heeft het probleem voorlopig voor mij opgelost en het lijkt erop dat de zoekresultaten redelijk snel worden geretourneerd.)

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. Afbeeldingen opslaan in PostgreSQL

  2. MySQL-volgorde per veld in Eloquent

  3. Correcte innodb_log_file_size instellen in mysql

  4. Verwijzing naar groepen in een MySQL-regex?