おそらく、加重検索/結果を実行するこのアプローチはあなたに適しています:
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サブクエリを使用して、結果を並べ替えるための重みを提供します。この場合、3つのフィールドが検索され、フィールドごとの重みを指定できます。おそらくユニオンよりも安価であり、プレーンなMySQLのみでより高速な方法の1つです。
より多くのデータがあり、より迅速な結果が必要な場合は、SphinxやLuceneなどの使用を検討できます。