Mit SOUNDEX ist merkwürdigerweise gar kein Unterschied zu der von mir oben angegebenen MySQL-Suche zu erkennen.
Aber möglicherweise könnte eine Kombination von levenshtein und SOUNDEX zum Ziel führen.
Bei deinem Link gibt es jemanden vom 07-Mar-2005 05:01, der folgendermaßen seine Suchergebnisse sortiert:
<?php
// PHP CODE INCLUDING DB LOOKUPS HERE
usort($searchresults, "finallevenshteinsortfunction");
function finallevenshteinsortfunction($a, $b)
{
if(($a['levenshtein'] > $b['levenshtein']) || ( $a['levenshtein'] == $b['levenshtein'] && strnatcasecmp( $a['Last_Name'], $b['Last_Name']) >= 1) ){ return $a['levenshtein'];} // Ok... The levenstein is greater OR with the same levenshtein, the last name is alphanumerically first
elseif($a['levenshtein'] == $b['levenshtein']){ return '0';} // The levenstein matches
elseif($a['levenshtein'] < $b['levenshtein']){ return -$a['levenshtein'];}
else{die("<!-- a horrable death -->");}
}
?>
Jedoch frage ich mich nun wie man nun mithilfe der Funktion die ähnlichsten Datensätze auswählt.
Ich dachte vielleicht mit:
while $search_array = mysql_fetch_array($searchresults) {
$reihenfolge = finallevenshteinsortfunction($sucheingabe, $search_array["irgendwas"]);
SELECT ... ORDER BY ".$reihenfolge."...
Aber wie mir gerade beim Schreiben auffällt, ist das ziemlich falsch. Man müsste die Abfrage mit ORDER BY außerhalb der WHILE-Schleife durchführen.
Vielleicht kann mir jemand weiterhelfen