Probabilmente questo approccio di fare una ricerca / risultati ponderati è adatto a te:
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
Utilizza una sottoquery select per fornire il peso per ordinare i risultati. In questo caso tre campi ricercati, è possibile specificare un peso per campo. Probabilmente è meno costoso dei sindacati e probabilmente uno dei modi più veloci solo in MySQL.
Se hai più dati e hai bisogno di risultati più velocemente, puoi prendere in considerazione l'utilizzo di qualcosa come Sphinx o Lucene.