Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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.

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.