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

Søgeordssøgning og rangeringsresultat

Dette virker helt sikkert:

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

Elementerne fra databasen sorteres derefter i faldende. Så den mest relevante får førstepladsen.

bemærk:Dette fungerer kun fint, når antallet af nøgleord er lille. På grund af at kontrollere 3 gange for længde for hvert søgeord. Så responstiden på større tabeller og flere søgeord kan være lidt anderledes;)




  1. dobbelte resultater i mit array ( mysql_fetch_array )

  2. PHP udarbejdede erklæringer og transaktioner i en løkke

  3. Varbinary vs Blob i MySQL

  4. Sådan tilføjer du dynamisk tekstboks (række) og gemmer til databasen ved hjælp af PHP