sql >> Databáze >  >> RDS >> Mysql

Potřebujete pomoc s SQL pro hodnocení výsledků vyhledávání

Našel jsem funkční řešení výše uvedeného problému a zveřejňuji jej zde, pro případ, že by někdo jiný měl podobný problém.

Řešením je použít podvýběr místo příkazu case. Zde je výše uvedený odklon od kódu, opravený. (Nevím, jestli je to nejlepší nebo nejúčinnější řešení, ale problém mi prozatím vyřešilo a zdá se, že výsledky vyhledávání vrací poměrně rychle.)

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. Vztah relace a připojení SQLAlchemy

  2. Rozdíl mezi schématem / databází v MySQL

  3. Zastavení dotazu MySQL po prvním řádku

  4. SQL Stále dostává chybu s ON UPDATE CASCADE