Вероятно този подход за извършване на претеглено търсене/резултати е подходящ за вас:
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
Той използва подзаявка за избор, за да предостави теглото за подреждане на резултатите. В този случай три полета, търсени в, можете да посочите тегло за поле. Вероятно е по-евтино от съюзите и вероятно един от по-бързите начини само в обикновения MySQL.
Ако имате повече данни и се нуждаете от по-бързи резултати, можете да обмислите използването на нещо като Sphinx или Lucene.