Mysql
 sql >> Base de données >  >> RDS >> Mysql

Recherche par mot-clé et résultat du classement

Cela fonctionne à coup sûr :

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

Les éléments de la base de données sont ensuite triés par ordre décroissant. Ainsi, le plus pertinent obtient la première place.

note :Cela ne fonctionne correctement que lorsque le nombre de mots-clés est faible. En raison de la vérification 3 fois de la longueur de chaque mot-clé. Ainsi, le temps de réponse sur des tables plus grandes et plus de mots-clés pourrait être un peu différent ;)