Mehrere PLZ abfragen
Christoph
- datenbank
0 wahsaga0 KraKi(noAuth)0 _roro
0 Christoph
0 _roro0 King^Lully0 Christoph
Hallo,
ich habe eine SQL-Abfrage, wo ich bestimmte PLZ abrufen möchte, die in einem bestimmten Bereich liegen.
Mit SELECT ... WHERE plz BETWEEN '55000' AND '56000' funktioniert das ganz wunderbar, nur möchte ich jetzt noch eine Abfrage dahinter klemmen und das geht nicht so ganz:
SELECT ... WHERE plz BETWEEN '55000' AND '56000' AND '60000' AND '70000'
Er soll mir also alles rausholen was zwischen 55000 und 56000 liegt und alles was zwischen 60000 und 70000 liegt, aber er zeigt mir nur alles was ziwschen 55000 und 56000 liegt an. Was muss ich da anders machen?
Grüße
Christoph
hi,
SELECT ... WHERE plz BETWEEN '55000' AND '56000' AND '60000' AND '70000'
Er soll mir also alles rausholen was zwischen 55000 und 56000 liegt und alles was zwischen 60000 und 70000 liegt, aber er zeigt mir nur alles was ziwschen 55000 und 56000 liegt an. Was muss ich da anders machen?
Die Bedingungen _sinnvoll_ verknüpfen - und nicht mit reiner Phantasie-Syntax.
Du möchtest zwei mal x BETWEEN y AND z.
Und da eine Postleitzahl sicher nicht in zwei getrennten Bereichen gleichzeitig liegt, möchtest du die beiden Bedingungen auch nicht mit AND verknüpfen, sondern ...?
gruß,
wahsaga
hi,
(...)
wahsaga
Mit anderen Worten ( Worten... hihi)
SELECT ... WHERE ((plz BETWEEN '55000' AND '56000') AND (plz BETWEEN '60000' AND '70000'))
hi,
Mit anderen Worten ( Worten... hihi)
SELECT ... WHERE ((plz BETWEEN '55000' AND '56000') AND (plz BETWEEN '60000' AND '70000'))
Du hast wahsaga falsch verstanden.
roro
Du hast wahsaga falsch verstanden.
Nö, vertippt ^^ (vertan)
hi
Die Bedingungen _sinnvoll_ verknüpfen - und nicht mit reiner Phantasie-Syntax.
Du möchtest zwei mal x BETWEEN y AND z.
Und da eine Postleitzahl sicher nicht in zwei getrennten Bereichen gleichzeitig liegt, möchtest du die beiden Bedingungen auch nicht mit AND verknüpfen, sondern ...?
Dann wohl mit OR, ok, soweit geht es auch, aber jetzt reagiert das SQL-Statement "eigenartig".
SELECT kunden_id, name, vorname, telefon, email, strasse, plz, ort, land, sum(gesPreis) as 'endwert', bezahlt, vorfall_typ FROM tspi_basket_geschaeft WHERE plz BETWEEN '55000' AND '56000' OR plz BETWEEN '60000' AND '70000' AND land='de' AND vorfall_typ='rec' AND GROUP BY kunden_id ORDER BY endwert DESC
Jetzt holt er mir zwar alles raus was ich will, aber genau beim vorfall_typ='rec' und beim land='de' macht er jetzt was er will und ignoriert diese Angaben leider völlig :( Also doch in Klammern setzen?
Du mußt Klammern setzen:
where (plz between x and y or plz between m and n) and ...
WHERE plz BETWEEN '55000' AND '56000' OR plz BETWEEN '60000' AND '70000' AND land='de' AND vorfall_typ='rec' AND GROUP BY kunden_id ORDER BY endwert DESC
In deinem Statement hat AND mehrere Bedeutungen, einmal als Teil des Vergleichsoperators BETWEEN...AND und als logischer Operator. Daneben macht dir die Operatorenrangfolge einen Strich durch die Rechnung. Setze also Klammern, um die logischen Verknüpfungen deinen Vorstellungen entsprechend zu gruppieren (http://dev.mysql.com/doc/refman/5.1/de/operator-precedence.html)
Siechfred
Hallo,
SELECT ... WHERE plz BETWEEN '55000' AND '56000' AND '60000' AND '70000'
AND und OR...
Try this:
SELECT okz, ort, info
FROM okz
where okz between 0201 and 0203 or okz between 0351 and 0361
roro
SELECT okz, ort, info
FROMokz
where okz between 0201 and 0203 or okz between 0351 and 0361
Nur so am Rande: Die Backticks um den Tabellennamen sind hier nicht nötig.
Siechfred
SELECT okz, ort, info
FROMokz
where okz between 0201 and 0203 or okz between 0351 and 0361Nur so am Rande: Die Backticks um den Tabellennamen sind hier nicht nötig.
Schuldche, war copy/paste ;-)
SELECT okz, ort, info
FROMokz
where okz between 0201 and 0203 or okz between 0351 and 0361Nur so am Rande: Die Backticks um den Tabellennamen sind hier nicht nötig.
aber dennoch ist es empfehlenswert, sich das anzugewöhnen und noch eher bei Variablen a la '$wert'.
Gruß
Reiner
hi,
Nur so am Rande: Die Backticks um den Tabellennamen sind hier nicht nötig.
aber dennoch ist es empfehlenswert, sich das anzugewöhnen und noch eher bei Variablen a la '$wert'.
Das sind keine Backticks.
gruß,
wahsaga
hi,
Nur so am Rande: Die Backticks um den Tabellennamen sind hier nicht nötig.
aber dennoch ist es empfehlenswert, sich das anzugewöhnen und noch eher bei Variablen a la '$wert'.
Das sind keine Backticks.
bezog sich in dem Fall auch eher auf:
... where data = '$wert' ....
was meist noch wichtiger ist, weil man meist nicht weiß, welche Werte die Daten annehmen.
Gruß
Reiner
Nur so am Rande: Die Backticks um den Tabellennamen sind hier nicht nötig.
aber dennoch ist es empfehlenswert, sich das anzugewöhnen
Ich halte es für sinnvoller, (Tabellen-)Namen zu meiden, welche Backticks erfordern :)
Siechfred
Was muss ich da anders machen?
Auf jeden Fall sollte ein Sichanfreunden mit der Dokumentation des ungenannt gebliebenen RDBMSes erfolgen bevor Du Dich mit solchen Fragen ins Forum traust. Immer schön zuvor "Problem isolieren" und auch die eigenen Versuche in einen Kontext zur Doku zu bringen versuchen.
Oder sind Wir da in Unserem Urteil zu hart, was denkst Du?
Hi
Auf jeden Fall sollte ein Sichanfreunden mit der Dokumentation des ungenannt gebliebenen RDBMSes erfolgen bevor Du Dich mit solchen Fragen ins Forum traust. Immer schön zuvor "Problem isolieren" und auch die eigenen Versuche in einen Kontext zur Doku zu bringen versuchen.
Oder sind Wir da in Unserem Urteil zu hart, was denkst Du?
Öhm nicht zu hart, aber ich habe vorher schon ausprobiert und in der Online-Doku von Mysql bei BETWEEN geschaut und auch gegoogelt, aber eben nichts gefunden, ausser einigen Ansätzen. Ich hatte vorher noch eine völlig andere Schreibweise drin gehabt, durch Google bin ich erst mal auf BETWEEN aufmerksam geworden. Trotz alledem wäre das Forum für mich der letzte Zufluchtsort. Der Gedanke mit den Klammern hatte ich schon, aber wohl falsch ausprobiert...
Sollte ja kein böser Vorwurf sein, aber wenn Du
SELECT
...
WHERE
plz BETWEEN '55000' AND '56000' AND '60000' AND '70000'
schon hast, dann wäre es doch zu
SELECT
...
WHERE
(plz BETWEEN '55000' AND '56000') OR
(plz BETWEEN '60000' AND '70000')
nicht mehr weit, vgl. auch Folgendes:
SELECT
...
WHERE
(plz = '55000') OR
(plz = '70000')
bzw.
SELECT
...
WHERE
(
plz in ('55000', '70000')
)
Mag ja alles sein, aber ich hab mich wohl zu lange mit anderen Problemen aufgehalten gehabt und dann am Ende wohl gar nicht mehr durchgesehn:
SELECT ... WHERE plz >=60000 AND <70000 usw... Und wie du vielleicht am Anfangspost erkannt hast, hab ich wohl statt OR eben AND genommen und daran hatte es schon gescheitert gehabt, logischer Denkfehler meinerseits unter Stress und Druck, nobody is perfekt :(