Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben
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.

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...