Verschachtelte sql abfrage?

Liebe Gemeinde!

Ich stehe gerade auf dem Schlauch.

Folgendes Problem:

Ich möchte aus einer DB beispielsweise alle Kunden über 25 die entweder in 70184 Stuttgart, 70184 Stuttgart Mitte, 70184 Stuttgart Süd oder 70182 Stuttgart Mitte wohnen - ich möchte nicht 70182 Stuttgart Süd dabei haben. In der DB existieren Felder für plz, stadt und stadtteil - die Variable sieht zur Zeit in etwa so aus (‚70184%Stuttgart‘ , ‚70184%Stuttgart%Mitte‘ , ‚70184%Stuttgart%Süd‘ , etc…

Muss ich für jede plz,stadt,stadtteil Kombination eine eigene Abfrage starten oder geht das womöglich auch in einer?

Freundliche Grüße & herzlichen Dank für einen Tipp!

Hallo HSK,

nein Einzelabfragen sind nicht nötig. Auch wenn ich bereits den Aufbau der Variable als nicht geschickt betrachten würde, reicht ein

where ( concat(plz,"%",stadt,"%",stadtteil)=$variable1
 or concat(plz,"%",stadt,"%",stadtteil)=$variable2
 ...
 ) 
 and alter\>25
; 

(ich gehe von MySQL und PHP aus).
Etwas problematischer ist die Interpretation, ob ein Stadtteil abgefragt wird oder nicht. Denn die Angebote für ‚70184%Stuttgart%Mitte‘ , ‚70184%Stuttgart%Süd‘ sollten doch bereits in ‚70184%Stuttgart‘ enthalten sein. Deshalb müsste man bei diesen Variablenaufbau noch ein Abfrageteil ohne Stadtteil nachschieben.

where ( concat(plz,"%",stadt,"%",stadtteil)=$variable1
 or concat(plz,"%",stadt,"%",stadtteil)=$variable2
 ...
 ) 
 or ( concat(plz,"%",stadt)=$variable1
 or concat(plz,"%",stadt)=$variable2
 ...
 ) 
 and alter\>25
; 

MfG Georg V.

Hallo Georg V.

danke für deine schnelle und hilfreiche Antwort!

Ich hatte vorhin geschrieben, dass ich es mit plz + stadt + stadtteil gelöst hatte, das war aber etwas voreilig :smile: Das mit concat ist der richtige Weg.

Ich habe die % wieder rausgenommen. Die Abfrage sieht nun so aus:

WHERE
(CONCAT( plz, stadt, stadtteil )
IN „.$plz_stadt_stadtteilsql.“) AND
alter > 25

In $plz_stadt_stadtteilsql steht beispielsweise: (‚70184StuttgartMitte‘ , ‚70184StuttgartSüd‘ , ‚70184Stuttgart‘)

Das funktioniert soweit - ich brauche es auch nicht ändern, wenn kein Stadtteil angegeben ist, nicht passende Stadtteile werden aussortiert.

Und jetzt habe ich ein weiteres Problem - die Umlaute funkionieren nicht.

Unter phpmyadmin bringt ‚70184StuttgartSüd‘ ein Ergebnis - über die gleiche query unter php auf dem Webserver passiert nichts!

Kollation ist utf8_general_ci. In der Tabelle der DB steht Süd.

Irgendwelche Tipps wie ich das zum laufen bringe?

Viele Grüße & Danke schon mal

Hallo HSK,

hast Du nach Eröffnen der MySQl-Session auch ein „set names utf8“ abgesetzt?

MfG Georg V.

Hallo Georg V.

besten Dank für die Hilfe. Das wars!

Am Anfang meines php scriptes steht nun:
mysql_query(„SET NAMES ‚utf8‘“);

Die Abfrage in der DB funktioniert nun wie gewünscht :smile: … aber jetzt ist die Anzeige im Browser verhagelt.

Süd erscheint als Süd.

Die Seite ist wie folgt eingestellt:

Noch ein Tipp für mich?

Herzlichen Dank!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo HSK,

kann es sein, dass Dein Webserver falsch konfiguriert ist? http://www.sqldbu.com/ger/sections/tips/utf8.html

MfG Georg V.

Hallo Georg V.

Yap, das wars. Die Webseite lieferte Iso aus. Ich habe das jetzt auf dem Webserver umgestellt auf utf-8 und die ganzen Texte und Formulare manuell geändert. Nach der Umstellung auf utf-8 war bei jedem Umlaut nur ein Fragezeichen zu sehen.

Besten Dank nochmals! & Grüße!