SQL SQL-Suche vereinfachen?

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Hallo zusammen,

ich habe zu meinem Problem schon was gegoogelt, konnte aber nichts
wirklich brauchbares für mich finden - vielleicht kann mir hier einer
weiterhelfen.

Wenn ich in einer PHP-App nach einem Namen suche,
bspw. 'max mustermann',
möchte ich auch folgende Ergebnisse bekommen:
-> MAX MUSTERMANN
-> Max Mustermann

Wenn ich in einer PHP-App nach einem Nummer suche,
bspw. '01234567890',
möchte ich auch folgende Ergebnisse bekommen:
-> 0123 - 45 67 890
-> (0)123-4567890
-> ...

Kann man das mit einfachen Möglichkeiten realisieren?

VG, David
 
Du hast natürlich die Möglichkeit, mehrere Abfragen zu erstellen oder besondere Parameter anzugeben, die deine Abfrage entsprechend modifizieren.

Aber aus meiner Sicht ist das ein schlechter Workaround. Du solltest eher deinen Datensatz einheitlich formatieren, damit du nicht dessen Unzulänglichkeiten über eine Suche ausgleichen musst. Ändere lieber die eingetragenen Daten auf eine sinnvolle "Schreibung", bevor du mit Tricksereien anfängst. Gerade wenn der Datensatz langfristig ausgelegt ist, spart dir das sehr viel Ärger.

Und wenn es z.B. eine Webseite ist, auf der Leute ihre Daten eingeben, lohnt sich die Prüfung auf korrektes Format direkt vor dem Absenden. So kannst du sicherstellen, dass nur "gute" Daten ankommen.
 
Das kannst du mit lower lösen

Select *
from Person
where lower(name) = 'musterman'

Musterman muss dann aber immer klein geschrieben sein
 
LIKE prüft bereits case-insensitive, MATCH ebenso. Wenn du auf Gleichheit prüfen willst, erstell dir ne normalisierten Spalte, welche problemlos ohne Verrenkungen durchsucht werden kann. Bei deiner Telefonnummer das Selbe, nur wird dort einerseits in der originalen Spalte (0)123-4567890, aber ebenso in der Normalisierten 01234567890 gesucht.
 
Den Beitrag von plan?los! kann ich nur unterschreiben. Ergänzend noch: über Standards zur Rufnummernschreibweise informieren, den treffendsten für das aktuelle Projekt auswählen und dann konsequent an einen halten. Nichts selbst erfinden.

DIN 5008
E.123
RFC 3966
 
Yuuri schrieb:
LIKE prüft bereits case-insensitive.

Auf welches DBMS beziehst du dich? Die Oracle-Installation, die ich hier vor der Nase habe, tut das bspw. nicht.

@Topic: sieh zu, dass du deine Daten normalisierst. Das wird früher oder später sonst eklig. :)
 
mental.dIseASe schrieb:
Auf welches DBMS beziehst du dich? Die Oracle-Installation, die ich hier vor der Nase habe, tut das bspw. nicht.
Hier gehts um eine PHP-App und demzufolge höchstwahrscheinlich um ein MySQL. Standardcollation ist ein *_ci, ergo arbeitet LIKE case-insensitive. Was bei Oracle, Postgres, MSSQL und Co. abläuft, ist hier irrelevant. Wenn der TE nicht weiter spezifiziert, geh ich vom Standard aus.
 
Macht nix. Da ist auch keiner. Ich verwend selber PHP/Pg, wo es ein ILIKE gibt für case-insensitive matches.

Sorry, aber PHP hat mit mySQL genau gar nichts zu tun, da kann man gerne versuchen vom einen auf das andere zu schließen, wird sicher auch manchmal - öfter -- recht haben, aber ich erinnere dennoch daran, das "assume" einen "ass" out of "u" and "me" macht.


Ansonsten, aber das nur sicherheitshalber, weil es nicht recht hervorgeht: Max Mustermann sind natürlich zwei Spalten (vorname/name). Man *könnte* mit einer Volltextsuche ran, aber das ist sicher nicht der bevorzugte Weg.

DBMS sind nicht Excel. Deshalb Daten aufräumen, normalisieren und, wie bereits erwähnt, sicherstellen, daß sie nur "vor-aufgeräumt" in die Datenbank eingetragen werden können.

Sonst wird das arg schwierig mit der Eindeutigkeit in der Datenbank.
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Themen

Zurück
Oben