Sehr interessant wenn man Schreibfehlern emtgegen wirken möchte da diese Funktion prüft ob zwei Werte ähnlich sind.
So habe ich dann einen Test gemacht und musste feststellen das diese Funktionen in MySQL und PHP unterschiedlich arbeiten.
Auszug MySQL:
Auszug MySQL:
SOUNDEX(
Gibt einen Soundex-String ausstr
)str
zurück. Zwei Strings, die fast identisch klingen, sollten identische Soundex-Strings haben. Ein Soundex-String ist standardmäßig vier Zeichen lang, die FunktionSOUNDEX()
gibt aber einen beliebig langen String zurück. Sie könnenSUBSTRING()
für das Ergebnis verwenden, um einen Standard-Soundex-String zu erhalten. Alle nicht alphabetischen Zeichen instr
werden ignoriert. Alle internationalen alphabetischen Zeichen außerhalb des Bereichs A bis Z werden als Vokale behandelt.
mysql>SELECT SOUNDEX('Hello');
-> 'H400'
mysql>SELECT SOUNDEX('Quadratically');
-> 'Q36324'
Hinweis: Diese Funktion implementiert den Soundex-Originalalgorithmus und nicht die gängigere erweiterte Version, wie sie auch von D. Knuth beschrieben wird. Der Unterschied besteht darin, dass die Originalversion zuerst Vokale und dann Duplikate verwirft, während die erweiterte Version umgekehrt vorgeht.
Auszug PHP :
Beschreibung
string soundex ( string $str )
Errechnet den Wert der Laut-Ähnlichkeit von str.
Soundex-Werte haben die Eigenschaft, dass ähnlich ausgesprochene Wörter den gleichen Soundex-Wert erzeugen. Dies kann zur Suche in Datenbanken verwendet werden, wenn Sie zwar die Aussprache aber nicht die genaue Schreibweise kennen. Die Funktion soundex gibt einen String aus 4 Zeichen, beginnend mit einem Buchstaben, zurück.
Diese besondere soundex-Funktion ist u.a. von Donald Knuth in "The Art Of Computer Programming, vol. 3: Sorting And Searching", Addison-Wesley-Verlag (1973), Seiten 391 bis 392 beschrieben.
Legen wir zum Beispiel eine Tabelle mit Vornamen an und tragen dort
Manuel
Manuela
Michael
Mathias
Peter
Petra
Paul
ein dann bekommen wir von MySQL alle Vornamen mit M zurück, PHP makiert jedoch nur Manuel und Manuela.
mysql_connect('localhost', 'root', '');
mysql_select_db('adressdb');
$res = mysql_query('SELECT * FROM firstname WHERE SOUNDEX(firstnameData) SOUNDS LIKE SOUNDEX("manole");');
while ($result = mysql_fetch_assoc($res)) {
var_dump($result);
if (soundex($result['firstnameData']) == soundex('manole'))
echo "gefunden.";
}
Keine Kommentare:
Kommentar veröffentlichen