Có thể cách tiếp cận thực hiện tìm kiếm / kết quả có trọng số này phù hợp với bạn:
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
Nó sử dụng một truy vấn con được chọn để cung cấp trọng số cho việc sắp xếp các kết quả. Trong trường hợp này, ba trường được tìm kiếm, bạn có thể chỉ định trọng số cho mỗi trường. Nó có lẽ ít tốn kém hơn các công đoàn và có lẽ là một trong những cách nhanh hơn chỉ với MySQL thuần túy.
Nếu bạn có nhiều dữ liệu hơn và cần kết quả nhanh hơn, bạn có thể cân nhắc sử dụng thứ gì đó như Sphinx hoặc Lucene.