sql-verständnis
bertie
- php
0 Julian von Mendel0 bertie1 Ilja
hallo leute!
ich hab ein kleines verständnisproblem bei foglender sql-abfrage:
SELECT id FROM banner WHERE size ='right' AND bereich LIKE '%a%' OR eigenwerbung = '1' OR sponsor = '1' AND '2005-08-11' BETWEEN startdate
AND enddate
warum erhalte ich auch ergebnisse, die in der spalte size NICHT right sonder left stehen haben?
danke für eure hilfe,
berie
Hi,
SELECT id FROM banner WHERE size ='right' AND bereich LIKE '%a%' OR eigenwerbung = '1' OR sponsor = '1' AND '2005-08-11' BETWEEN
startdate
ANDenddate
warum erhalte ich auch ergebnisse, die in der spalte size NICHT right sonder left stehen haben?
wegen dem OR? Schreib dir doch mal Klammern rein. OR hat eine höhere Priorität als AND, d. h. wenn z. B. eigenwerbung = '1' zutrifft ist die bedingung ebenfalls erfüllt. Wenn du das verhindern möchtest, setze Klammern.
Schöne Grüße
Julian
Hi,
hi,
wegen dem OR? Schreib dir doch mal Klammern rein. OR hat eine höhere
Priorität als AND, d. h. wenn z. B. eigenwerbung = '1' zutrifft ist
die bedingung ebenfalls erfüllt. Wenn du das verhindern möchtest,
setze Klammern.
so krieg ich dann nen sql-error:
SELECT id FROM banner WHERE size ='right' AND bereich LIKE '%a%' ( OR eigenwerbung = '1' OR sponsor = '1' ) AND '2005-08-11' BETWEEN startdate
AND enddate
sind die klammern da falsch gesetzt?
danke für die hilfe,
bertie
Hi,
wegen dem OR? Schreib dir doch mal Klammern rein. OR hat eine höhere
Priorität als AND, d. h. wenn z. B. eigenwerbung = '1' zutrifft ist
die bedingung ebenfalls erfüllt. Wenn du das verhindern möchtest,
setze Klammern.so krieg ich dann nen sql-error:
SELECT id FROM banner WHERE size ='right' AND bereich LIKE '%a%' ( OR eigenwerbung = '1' OR sponsor = '1' ) AND '2005-08-11' BETWEEN
startdate
ANDenddate
nachdem ich nicht weiß, was du machen möchtest, kann ich dir die Klammern nicht einfach richtig hinsetzen. Du klammerst jedoch nur die ORs ein, was vollkommen sinnlos ist. Du musst die ANDs einklammern. So z. B.:
SELECT id FROM banner WHERE (size ='right' AND bereich LIKE '%a%') OR eigenwerbung = '1' OR (sponsor = '1' AND '2005-08-11' BETWEEN startdate
AND enddate
)
Schöne Grüße
Julian
Hi,
hi nochmal,
nachdem ich nicht weiß, was du machen möchtest, kann ich dir die Klammern nicht einfach richtig hinsetzen. Du klammerst jedoch nur die ORs ein, was vollkommen sinnlos ist. Du musst die ANDs einklammern. So z. B.:
SELECT id FROM banner WHERE (size ='right' AND bereich LIKE '%a%') OR eigenwerbung = '1' OR (sponsor = '1' AND '2005-08-11' BETWEENstartdate
ANDenddate
)
ich verstehs noch immer nicht ganz...
ich übersetz meine abfrage mal:
also ich möchte alle ids, derne größe 'right' ist und die ( entweder bereich Like %a% oder eigenwerbung = 1 oder sposnor = 1 ) sind und das aktuelle datum zwischen start und eddatum liegt...
ich danke dir für deine bemühungen!
Schöne Grüße
Julian
yo,
also ich möchte alle ids, derne größe 'right' ist und die ( entweder bereich Like %a% oder eigenwerbung = 1 oder sposnor = 1 ) sind und das aktuelle datum zwischen start und eddatum liegt...
SELECT id
FROM banner
WHERE size ='right'
AND '2005-08-11' BETWEEN startdate AND enddate
AND (bereich LIKE '%a%' OR eigenwerbung = '1' OR sponsor = '1')
Ilja
yo,
wegen dem OR? Schreib dir doch mal Klammern rein. OR hat eine höhere Priorität als AND
meiner meinung nach ist es genau umgekehrt, ein AND wird zuerst ausgeführt und dann erst das OR, sprich das AND hat eine höhere Priorität.
Ilja