LIKE Abfrage über 2 Tabellen

megatom

Mitglied
$sql = "SELECT * FROM locations WHERE plz LIKE '%$plz%' ORDER BY plz";

wunderbar. $plz ist eine vorher übergebene Varibale.

Nun möchte ich aber die Abfrage einer weiteren Tabelle machen in der ebenfalls PLZ vorhanden sind, und die Datensätze nur selektieren, wenn die PLZ aus beiden Tabellen übereinstimmen.

Mache ich die Abfrage mit
WHERE users.plz = locations.plz es auch.

aber nun gibt es in der Tabelle locations auch Felder, die kommagetrennt mehrere PLZ enthalten. z.B. 76131,76132,76133...

daher muss ich also machen :

WHERE users.plz LIKE locations.plz .

Er selektiert aber dann nicht richtig.

WHERE users.plz LIKE %locations.plz% und
WHERE users.plz LIKE '%locations.plz%' gehen auch nicht.

Irgendeine Lösung ?
 
Ich würde mir zunächst mal Gedanken um Dein Datenbankmodell machen. Da gibts sowas wie Normalformen und eine Spalte (Attribut) mit nicht-atomaren Werten, also solchen komma-getrennten PLZs zum Beispiel, bedeutet für Dein Modell: nicht mal 1. Normalform. I.d.R. sollte ein relationales Modell wenigstens 3. Normalform haben, um sich allen möglichen Ärger vom Hals zu halten.
 
Vielen Dank, aber das hilft mir nicht direkt weiter.

Die Tabelle mit den PLZ die kommagetrennt ist, habe ich nicht selber erstellt.
Und sie hat mehrere tausend zeilen, also umkonvertieren ist nicht
 
Zuletzt bearbeitet:
Hmm...also nehmen wir mal folgendes Beispiel:

PLZa = 12345
PLZb = 12345,56789

Wenn ich Dich richtig verstehe, wäre das ein Fall der bei der Anfrage zu einer Berücksichtigung der entsprechenden Tupel führen soll. Aber

PLZa LIKE PLZb ist hier natürlich keine wahre Aussage
PLZa LIKE '%$PLZb%'' geht nicht, weil die LIKE-Bedingung das Muster %12345,56789% nicht mit 12345 matchen kann (logischerweise).

Ergo: Die einzelnen PLZs müssen als zweiter Operand in der LIKE-Bedingung verwendet werden, die zusammengesetzten als erster. Denn

12345,56789 LIKE %12345% ist eine wahre Aussage.

P.S.: Falls Du noch weitere Operationen mit dieser "unnormalen" Tabelle vorhaben solltest, denke besser nochmal über 'ne Konvertierung nach. Sollte kein großer Aufwand sein und erspart Dir beim Umgang mit der Tabelle 'n Haufen Arbeit, Ärger und Zeit.
 
Zurück