To na pewno działa:
$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";
Pozycje z bazy są następnie sortowane malejąco. Więc najtrafniejsze zajmuje pierwsze miejsce.
uwaga:działa to dobrze tylko wtedy, gdy liczba słów kluczowych jest niewielka. Z powodu sprawdzania 3 razy długości każdego słowa kluczowego. Tak więc czas odpowiedzi przy większych tabelach i większej liczbie słów kluczowych będzie nieco inny;)