Veröffentlicht 13. Oktober 200420 j Folgendes Problem Ich suche eine Möglichkeit, Namen aus einer MySQL - Tabelle zu filtern. Mit dem Befehl "$sql="select *....." klappt das natürlich ganz einfach, ABER wenn ich mich jetzt verschreibe, z.B. statt nem v im Namen ein w schreibe soll er mir trotzdem ein ergebnis liefern. Hab es jetzt mit folgendem Script probiert: $laenge=strlen($suche); for($leng=$laenge;$leng>=1;$leng--) { $rest = substr("$suche", 0, $leng); echo $rest."<br>"; $sql="select * from $table_pe where pers_name like '$rest%' ORDER BY pers_name,pers_vname"; $persult=mysql_query($sql,$conn_id); $perszahl=mysql_num_rows($persult); if($perszahl>=1) { break; } }[/PHP][/color] wobei in $suche der zu suchende Name steht. Funktioniert soweit auch ganz gut, bei den meisten Namen. Wenn ich jetzt aber Lewo eingebe, der sich eigentlich Lewo schreibt, werden mir alle Datensätze ausgegeben, die sich am Anfang mit Lew schreiben, also nicht den gesuchten Levo.
13. Oktober 200420 j hm da wirste mit regulären Ausdrücken rann müssen, aber wie genau, kann ich dir auch nicht sagen.
14. Oktober 200420 j Funktioniert soweit auch ganz gut, bei den meisten Namen. Viel zu kompliziert select * from $table_pe where soundex(pers_name) = soundex($suche) ORDER BY pers_name,pers_vname soundex ist ne interessante (und eigentlich garnich komplizierte) Funktion, mit der man eine Art Klangwert ermitteln kann. Ähnliche Namen liefern also denselben Wert (was du ja auch suchst).
14. Oktober 200420 j Und noch ein Stück kürzer: SELECT * FROM $table_pe WHERE pers_name SOUNDS LIKE $suche ORDER BY pers_name, pers_vname; Das einzige Manko an SOUNDS LIKE bzw. SOUNDEX() ist, dass dieser Algorhythmus auf die englische Sprache ausgelegt ist. Es kann (muss aber nicht) dazu kommen, dass evtl. deutsche Vertipper nicht immer gefunden werden. Allerdings ist meine eigene Erfahrung mit dieser Funktion sehr gut.
14. Oktober 200420 j Und noch ein Stück kürzer: SELECT * FROM $table_pe WHERE pers_name SOUNDS LIKE $suche ORDER BY pers_name, pers_vname; Cool, hab ich noch nie gehört. Gibts dass in allen SQL derivaten oder ist das z.b. MYSQL spezifisch?
14. Oktober 200420 j Also in mySQL sowie MS-SQL ist es vorhanden.Laut meinem Google auch in Oracle. Also gehe ich mal davon aus, dass es in diversen Datenbanken vorhanden ist.
14. Oktober 200420 j Also in mySQL sowie MS-SQL ist es vorhanden.Laut meinem Google auch in Oracle. Also gehe ich mal davon aus, dass es in diversen Datenbanken vorhanden ist. Gut zu wissen, besten dank!
14. Oktober 200420 j hm schade, hab grad ma die INFORMIX hilfe durchforstet, aber da gibts sowas anscheinend nicht. (Oder es heisst anders?) muss ich wohl mit ner eigenen stored prozedure rann.
14. Oktober 200420 j Das einzige Manko an SOUNDS LIKE bzw. SOUNDEX() ist, dass dieser Algorhythmus auf die englische Sprache ausgelegt ist. Naja, so arg unterscheidet sich die deutsche Sprache auch nicht von der englischen, also was den Algorhytmus angeht. Vokale werden vom SoundEx Algo. z.B. als 0 gewertet, fallen also weg. Und ein T ist ein T, egal ob deutsch oder englisch. Wir haben SoundEx bei uns im Einsatz (also einem Prog. von uns, allerdings nich die PHP Version- die sollte aber auf demselben Algo beruhen)) und es gibt eigentlich keine Probs damit.
14. Oktober 200420 j Für die, die es interessiert: Der Algorhythmus (engl.) http://www.archives.gov/research_room/genealogy/census/soundex.html Folgende Buchstaben werden vom Algorhythmus als "gleich" gewertet (alle nicht genannten Buchstaben/Zeichen werden nicht gewertet): B, F, P, V C, G, J, K, Q, S, X, Z D, T L M, N R
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.