Sonntag, 23. Oktober 2011

PHP SOUNDEX mysql php

Ich habe mich heute mal mit der Funktion SOUNDEX auseinander gesetzt.
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:

SOUNDEX(str)Gibt einen Soundex-String aus str zurück. Zwei Strings, die fast identisch klingen, sollten identische Soundex-Strings haben. Ein Soundex-String ist standardmäßig vier Zeichen lang, die Funktion SOUNDEX() gibt aber einen beliebig langen String zurück. Sie können SUBSTRING() für das Ergebnis verwenden, um einen Standard-Soundex-String zu erhalten. Alle nicht alphabetischen Zeichen in str 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