Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Potrzebujesz pomocy z SQL do rankingu wyników wyszukiwania

Znalazłem działające rozwiązanie powyższego problemu i zamieszczam je tutaj, na wypadek, gdyby ktoś inny miał podobny problem.

Rozwiązaniem jest użycie podselekcji zamiast instrukcji przypadku. Oto powyższy kod, poprawiony. (Nie wiem, czy jest to najlepsze, czy najskuteczniejsze rozwiązanie, ale na razie rozwiązało to problem i wydaje się, że dość szybko zwraca wyniki wyszukiwania.)

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:Jak zdefiniować lub uzyskać zmienne łańcuchowe typu LONG

  2. Baza danych zwróciła nieprawidłową wartość w QuerySet.dates()

  3. SQL - Jak transponować?

  4. Instalacja Django mysqlclient

  5. Zapytanie, aby uzyskać rekordy rodzica z rekordem dziecka, a następnie następne rekordy rodzic-dziecko w mysql