Вероятно, этот подход к взвешенному поиску / результатам подходит вам:
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
Он использует подзапрос select, чтобы указать вес для упорядочения результатов.В этом случае три поля обыскиваются, вы можете указать вес для каждого поля.Это, вероятно, дешевле, чем союзы, и, возможно, один из более быстрых способов только в простом MySQL.
Если у вас больше данных и вам нужны результаты быстрее, вы можете использовать что-то вроде Sphinx или Lucene.