sql >> Base de Datos >  >> RDS >> Mysql

¿La mejor manera de hacer una búsqueda ponderada en varios campos en mysql?

Probablemente este enfoque de hacer una búsqueda/resultados ponderados sea adecuado para usted:

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

Utiliza una subconsulta de selección para proporcionar el peso para ordenar los resultados. En este caso, se buscaron tres campos, puede especificar un peso por campo. Probablemente sea menos costoso que las uniones y probablemente una de las formas más rápidas solo en MySQL simple.

Si tiene más datos y necesita resultados más rápido, puede considerar usar algo como Sphinx o Lucene.