select abfrage mit like bezogen auf tabellenspalte [mySQL]

hegelX

Grünschnabel
Hallo,

ich habe folgendes Problem: ich möchte anhand der Postleitzahl herausfinden, aus welchem Bundesland ein User stammt. Dafür möcht ich die GeoClass Tabellen benutzen, indem ich die vom User angegebene PLZ mit denen in der GeoClass Tabelle abgleiche und dann bei Übereinstimmung das entsprechende Bundesland herausfiltere. Da in der Tabellenspalte PLZ der GeoClass Tabelle logischerweise auch mehrere PLZs pro Stadt vorhanden sein können, muß ich, um eine Übereinstimmung mit der PLZ des Users zu finden die Tabellenspalte mit like abgleichen. Wie schreibe ich nun den select Befehl mit like, welches sich auf eine Tabellenspalte bezieht und vor und nach dem Namen der Tabellenspalte die '%' Zeichen benötigt?!
Hier im Forum habe ich gelesen, dass die Abfrage mit like bei größeren Datenmengen eher schneckenmäßig daher kommt; kann man diese Abfrage auch schneller und eleganter lösen.
Bin für jede Hilfe dankbar
hegelX
 
Zu deinem Problem mit der Schnelligkeit:
Falls du LIKE verwendest und dabei mehrer Relationen hast, würde ich die Fremdschlüssel indexieren. Das hilft oft schon ziemlich viel. Wenn du jedoch eine Abfrage auf eine einzige Tabelle beschränkst, dann merkst du fast keinen Unterschied zu einem SELECT mit normalen Vergleichen im WHERE Block. Jedenfalls ist mir dies nie merklich aufgefallen.

Zu deinem PLZ-Problem:
Da blicke ich nicht ganz durch. Ein User hat doch nur eine PLZ, eine PLZ gehört immer nur zu einer Stadt (auch wenn diese mehrere PLZs hat), wozu brauchst du denn da noch einen LIKE?

Ich stelle mir das in Pseudo-SQL ( ;) ) etwa so vor:
Code:
SELECT stadt.name FROM stadt, user WHERE user.plz=stadt.plz AND user.name="Ein User"

Die Fremdschlüssel sind da natürlich sehr "hässlich" (die PLZ) und ich würde dies in der Praxis natürlich nicht so machen... ich versuch nur herauszufinden, was du genau willst.
 
Hallo TVE,
danke für deine schnelle Antwort.
Das Problem ist folgendes, der User gibt in ein Formular nur seine PLZ ein, nicht die Stadt (Kunde will das so, da er von mehr Tippfehlern bei der Angabe der Stadt ausgeht). Beziehe ich mich nun auf die 'geodb_locations' Tabelle des GeoClass Projektes, gibt es in der Spalte, in der die PLZ eingetragen sind ('plz') teilweise mehrere Einträge, deshalb muss ich hier like verwenden um das Bundesland rauszufiltern - der Städtename steht mir ja nicht zur Verfügung.
Grüße
 
Hi

wäre es nicht sinnvoll eine Tabelle für die Zuordnung PLZ->Bundesland einmal für alle vorhandenen Plz zu erstellen?

Dann erhälst du zu genau einer PLZ das Bundesland.

vop
 
Zurück