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

Cara terbaik untuk melakukan pencarian berbobot di beberapa bidang di mysql?

Mungkin pendekatan melakukan pencarian / hasil berbobot ini cocok untuk Anda:

SELECT *,
    IF(
            `name` LIKE "searchterm%",  20, 
         IF(`name` LIKE "%searchterm%", 10, 0)
      )
      + IF(`description` LIKE "%searchterm%", 5,  0)
      + IF(`url`         LIKE "%searchterm%", 1,  0)
    AS `weight`
FROM `myTable`
WHERE (
    `name` LIKE "%searchterm%" 
    OR `description` LIKE "%searchterm%"
    OR `url`         LIKE "%searchterm%"
)
ORDER BY `weight` DESC
LIMIT 20

Ini menggunakan subquery pilih untuk memberikan bobot untuk memesan hasil. Dalam hal ini tiga bidang dicari, Anda dapat menentukan bobot per bidang. Ini mungkin lebih murah daripada serikat pekerja dan mungkin salah satu cara yang lebih cepat hanya di MySQL biasa.

Jika Anda memiliki lebih banyak data dan membutuhkan hasil lebih cepat, Anda dapat mempertimbangkan untuk menggunakan sesuatu seperti Sphinx atau Lucene.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu SQL Injection tingkat kedua?

  2. Bagaimana cara membuat pengguna MySQL hanya-baca?

  3. Dapatkan nama kolom secara dinamis dengan nilai baris tertentu

  4. Bagaimana cara melakukan pemformatan 'Kasus yang tepat' dari kolom mysql?

  5. Bagaimana cara mengganti nama kunci asing di mysql?