sql >> Databasteknik >  >> RDS >> Mysql

Sökordssökning och rankningsresultat

Detta fungerar säkert:

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

Objekten från databasen sorteras sedan i fallande. Så den mest relevanta får förstaplatsen.

Obs:Detta fungerar bara bra när antalet nyckelord är litet. På grund av att du kontrollerar längden tre gånger för varje sökord. Så svarstiden på större tabeller och fler sökord kan vara lite annorlunda;)




  1. Bästa sättet att hålla TEXT-fältet unikt i MySQL-databasen

  2. PostgreSQL:Skapa tabell om det inte finns AS

  3. MySQL - Välj för att hämta senaste datum och tid

  4. Hur man kör 2 uppdateringsfrågor i en transaktion med JDBC