Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Butuh bantuan dengan SQL untuk memeringkat hasil pencarian

Saya telah menemukan solusi yang berfungsi untuk masalah di atas, dan saya mempostingnya di sini, jika ada orang lain yang mengalami masalah serupa.

Solusinya adalah dengan menggunakan sub-pilih, bukan pernyataan kasus. Berikut adalah divet kode di atas, dikoreksi. (Saya tidak tahu apakah ini solusi terbaik atau paling efisien, tetapi ini telah memperbaiki masalah bagi saya, saat ini, dan tampaknya mengembalikan hasil pencarian dengan cukup cepat.)

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. Menghitung perbedaan antara dua tanggal dalam PHP

  2. akses ditolak untuk pengguna @ 'localhost' ke database ''

  3. Di Apache Spark 2.0.0, apakah mungkin mengambil kueri dari database eksternal (daripada mengambil seluruh tabel)?

  4. Kesalahan fatal:Tidak dapat membuka dan mengunci tabel hak istimewa:Tabel 'mysql.host' tidak ada

  5. Aplikasi Laravel di Azure:Akses ditolak untuk pengguna 'azure'@'localhost'