Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Keyword-Suche und Ranking-Ergebnis

Das funktioniert sicher:

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

Die Einträge aus der Datenbank werden dann absteigend sortiert. Das Relevanteste erhält also den ersten Platz.

Hinweis:Dies funktioniert nur gut, wenn die Anzahl der Schlüsselwörter klein ist. Wegen der 3-maligen Überprüfung der Länge für jedes Keyword. Daher ist die Antwortzeit bei größeren Tabellen und mehr Schlüsselwörtern etwas anders;)