Điều này chắc chắn hoạt động:
$searchCondition = "description LIKE '%" . implode("%' OR description LIKE '%", $searchTerms) . "%'";
$orderCondition = array();
foreach ($searchTerms as $word) {
$orderCondition[] = "(length(description)-length(replace(description,\"".$word."\",\"\")))/length(\"".$word."\")";
}
$orderConditionString = "(".implode(" + ", $orderCondition).")";
$query = "SELECT description FROM table1 WHERE $searchCondition ORDER BY $orderConditionString DESC";
Các mục từ cơ sở dữ liệu được sắp xếp theo thứ tự giảm dần. Vì vậy, những gì có liên quan nhất sẽ chiếm vị trí đầu tiên.
lưu ý:Điều này chỉ hoạt động tốt khi số lượng từ khóa ít. Vì đã kiểm tra 3 lần độ dài cho mỗi từ khóa. Vì vậy, thời gian phản hồi trên các bảng lớn hơn và nhiều từ khóa hơn có thể sẽ khác một chút;)