sql >> Base de Datos >  >> RDS >> Mysql

Búsqueda de palabras clave y resultado de clasificación

Esto funciona seguro:

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

Los elementos de la base de datos se ordenan entonces de forma descendente. Entonces, lo más relevante obtiene el primer lugar.

nota:Esto funciona bien solo cuando el número de palabras clave es pequeño. Debido a la verificación 3 veces de la longitud de cada palabra clave. Entonces, el tiempo de respuesta en tablas más grandes y más palabras clave puede ser un poco diferente;)