Prawdopodobnie takie podejście do wyszukiwania ważonego / wyników jest dla Ciebie odpowiednie:
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
Używa podzapytania Select do podania wagi do uporządkowania wyników. W tym przypadku przeszukiwane są trzy pola, można określić wagę każdego pola. Jest prawdopodobnie tańszy niż unii i prawdopodobnie jest jednym z szybszych sposobów tylko w zwykłym MySQL.
Jeśli masz więcej danych i potrzebujesz szybszych wyników, możesz rozważyć użycie czegoś takiego jak Sphinx lub Lucene.