Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP/MySQL:Heben Sie SOUNDS WIKE-Abfrageergebnisse hervor

Beachten Sie, dass sich SOUNDS LIKE anhört funktioniert nicht so wie du denkst. Es ist nicht gleichbedeutend mit LIKE in MySQL, da es % nicht unterstützt Platzhalter.

Das bedeutet, dass Ihre Suchanfrage "John David" nicht findet, wenn Sie nach "John" suchen. Dies ist möglicherweise akzeptabel, wenn dies nur Ihr Fallback ist, aber es ist nicht ideal.

Hier ist also ein anderer Vorschlag (der möglicherweise verbessert werden muss); Verwenden Sie zuerst PHPs soundex() Funktion, um den Soundex des gesuchten Schlüsselworts zu finden.

$soundex = soundex($word);
$soundexPrefix = substr($soundex, 0, 2); // first two characters of soundex
$sql = "SELECT lastname, firstname ".
    "FROM table WHERE SOUNDEX(lastname) LIKE '$soundexPrefix%' ".
    "OR SOUNDEX(firstname) LIKE '$soundexPrefix%'";

Jetzt haben Sie eine Liste mit Vornamen und Nachnamen, die eine vage Ähnlichkeit im Klang haben (dies könnten viele Einträge sein, und Sie möchten vielleicht die Länge des Soundex-Präfixes erhöhen, das Sie für Ihre Suche verwenden). Sie können dann die Levenshtein-Distanz zwischen dem Soundex jedes Wortes und Ihrem Suchbegriff berechnen und danach sortieren.

Zweitens sollten Sie sich parametrisierte Abfragen in MySQL ansehen, um SQL-Injection-Bugs zu vermeiden.