Mysql
 sql >> Database >  >> RDS >> Mysql

Ricerca per parola chiave e risultato in classifica

Questo funziona di sicuro:

$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";

Gli elementi del database vengono quindi ordinati in modo decrescente. Quindi il più rilevante ottiene il primo posto.

nota:funziona bene solo quando il numero di parole chiave è piccolo. A causa del controllo 3 volte per la lunghezza per ogni parola chiave. Quindi il tempo di risposta su tabelle più grandi e più parole chiave potrebbe essere leggermente diverso;)