Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Pesquisa de palavras-chave e resultado de classificação


Isso funciona com certeza:
$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";

Os itens do banco de dados são classificados em ordem decrescente. Assim, o mais relevante fica em primeiro lugar.

nota:Isso funciona bem apenas quando o número de palavras-chave é pequeno. Por causa da verificação 3 vezes de comprimento para cada palavra-chave. Portanto, o tempo de resposta em tabelas maiores e mais palavras-chave pode ser um pouco diferente;)