kills Geschrieben 11. Februar 2006 Teilen Geschrieben 11. Februar 2006 Hallo zusammen, ich bin gerade dabei ein Such Modul für meine Webseite zu bauen. Jetzt steh ich vor dem SQL den ich dazu benötige. Ich möchte diesen so gestalten, dass auch bei kleineren Tippfehlern ein "gutes" Ergebnis erscheint. Ursprünglich sah mein SQL so aus: SELECT id FROM rex_article WHERE ( name LIKE "%'. $search .'%" or catname LIKE "%'. $search .'%" or keywords LIKE "%'. $search .'%" or descriptionLIKE "%'. $search .'%" ) AND clang='. $REX['CUR_CLANG'] .' LIMIT 40 Jetzt wollte ich via Soundex diese "Tippfehlerkorrektur" einbauen SELECT id FROM rex_article WHERE ( SOUNDEX(name) = SOUNDEX("'. $search .'") or SOUNDEX(catname) = SOUNDEX("'. $search .'") or SOUNDEX(keywords) = SOUNDEX("'. $search .'") or SOUNDEX(description) = SOUNDEX("'. $search .'") ) AND clang='. $REX['CUR_CLANG'] .' LIMIT 40 Leider findet meine Suche mit Soundex noch weniger, als nur mit LIKE... Wo ist mein Denkfehler in der Geschichte? Muss ich das Soundex auch noch irgendwie mit einem LIKE kombinieren? Viele Grüße, Markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pinhead Geschrieben 13. Februar 2006 Teilen Geschrieben 13. Februar 2006 Leider findet meine Suche mit Soundex noch weniger, als nur mit LIKE... Wo ist mein Denkfehler in der Geschichte? Muss ich das Soundex auch noch irgendwie mit einem LIKE kombinieren? Viele Grüße, Markus Das Problem ist das Soundex den ersten Buchstaben nicht als Zahl darstellt sondern als Buchstabe. soundex('Hello'); ergibt also H400 Wenn jetzt aber in einer deiner Spalten die du durchsuchts das 'Hello' nicht gerade am Anfang steht wird es vollständig als Zahl repräsentiert. Somit solltest du den Buchstaben bei deiner Suche nicht berücksichtigen. Außerdem empfehle ich auch hier einen LIKE String vergleich weil sonst die Texte absolut identisch sein müssten Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 13. Februar 2006 Teilen Geschrieben 13. Februar 2006 Das Problem ist das Soundex den ersten Buchstaben nicht als Zahl darstellt sondern als Buchstabe. [...] Außerdem empfehle ich auch hier einen LIKE String vergleich weil sonst die Texte absolut identisch sein müssten Das ist kein Problem, sondern der Standard Soundex-Algorithmus Und das LIKE ist eigentlich nicht nötig, weil er ja Soundex verwendet. (siehe hier). MySQL Soundex verwendet aber nicht nur 4 Zeichen Soundex-Code, sondern beliebig lange Codes (Also wirklich jeden Buchstaben im Wort ersetzen, aber min. 4 Zeichen lang. Friseur und Friseurin ergeben also bei MySQL M626 und M6265). ... SUBSTRING(SOUNDEX(name), 1, 4) = SUBSTRING(SOUNDEX(search), 1, 4) ... sollte das Problem beheben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 14. Februar 2006 Autor Teilen Geschrieben 14. Februar 2006 Hi zusammen, Danke für die Mühe! ... SUBSTRING(SOUNDEX(name), 1, 4) = SUBSTRING(SOUNDEX(search), 1, 4) ... Das kann doch so gar nicht gehen oder? Mein Feld indem ich suche ist vom Type TEXT. Mit den o.g. SOUNDEX geht es doch nur, wenn die ersten 4 Zeichen des Strings dem Suchstring entsprechen oder? Gruß, Markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.