bertie: sql-verständnis

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 startdateAND enddate

warum erhalte ich auch ergebnisse, die in der spalte size NICHT right sonder left stehen haben?

danke für eure hilfe,
berie

  1. Hi,

    SELECT id FROM banner WHERE size ='right' AND bereich LIKE '%a%' OR eigenwerbung = '1' OR sponsor = '1' AND '2005-08-11' BETWEEN startdateAND enddate

    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

    --
    "Real programmers can write assembly code in any language." - Larry Wall
    1. 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 startdateAND enddate

      sind die klammern da falsch gesetzt?

      danke für die hilfe,
      bertie

      1. 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 startdateAND enddate

        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

        --
        "Real programmers can write assembly code in any language." - Larry Wall
        1. 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' BETWEEN startdate AND enddate)

          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

          1. 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

    2. 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