Unknown column 'number' in 'where clause'

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Unknown column 'number' in 'where clause'

    Moin an alle,

    ich habe das folgende Problem:


    PHP-Code:
    SELECT DISTINCT tabelle1.ID1,
    tabelle1.TEXT1,
    tabelle2.TEXT2,
    COUNT(tabelle3.ID3) AS number
    FROM tabelle1
    LEFT JOIN tabelle2
    ON tabelle1
    .ID1=tabelle2.ID2
    LEFT JOIN tabelle3
    ON tabelle1
    .ID1=tabelle3.ID3
    WHERE tabelle2
    .ID2>=0
    AND number=0
    GROUP BY tabelle1
    .ID1
    ORDER BY tabelle1
    .TEXT1 ASC 

    Wenn ich das "AND number=0" weglasse, wird mir die Spalte ausgegeben und ich kann darauf zugreifen. Das "AND number=0" als WHERE gibt aber die Fehlermeldung, dass es die Spalte nicht gibt. Warum? Wie kann ich das lösen?

    Danke für Hilfe!!!
    Martin

  • #2
    versuchs mal mit
    PHP-Code:
    SELECT DISTINCT tabelle1.ID1,
    tabelle1.TEXT1,
    tabelle2.TEXT2,
    COUNT(tabelle3.ID3) AS number
    FROM tabelle1
    LEFT JOIN tabelle2
    ON tabelle1
    .ID1=tabelle2.ID2
    LEFT JOIN tabelle3
    ON tabelle1
    .ID1=tabelle3.ID3
    WHERE tabelle2
    .ID2>=0
    AND COUNT(tabelle3.ID3) = 0
    GROUP BY tabelle1
    .ID1
    ORDER BY tabelle1
    .TEXT1 ASC 
    das Problem hatte ich auch schonmal, hab es damit aber lösen können

    Kommentar


    • #3
      Die COUNT() Funktion wird erst nach WHERE ausgeführt, du kannst also nicht einen Wert verwenden, der noch gar nicht existiert.

      Du brauchst HAVING.

      Kommentar


      • #4
        Da geht er!

        Ich werd wahnsinnig! Das hatte ich schon getestet, ging nicht. Jetzt geht es... Danke Dir.

        Kommentar


        • #5
          Doch nicht

          Ne quatsch, stop! Das hatte ich nicht gemacht und das liefert auch nicht das Ergebnis. Die Summe der Spalte muss ja 0 sein. ich hatte an der Stelle direkt "COUNT(tabelle3.ID3)=0" getestet. Das gibt aber einen GROUP BY Fehler.

          Kommentar


          • #6
            Wie lautet die genaue Fehlermeldung?

            Kommentar


            • #7
              Sorry, ich stehe auf dem Schlauch. Mein Problem ist da noch, dass das DISTINCT (also GROUP BY) ja über tabelle1.ID1 läuft. Das HAVING aber dann doch auf tabelle3... Geht das trotzdem? Mein "Schnelltest" ist fehlgeschlagen ;-(

              Hätte mir das so vorgestellt:

              PHP-Code:
              SELECT DISTINCT tabelle1.ID1,
              tabelle1.TEXT1,
              tabelle2.TEXT2,
              COUNT(tabelle3.ID3) AS number
              FROM tabelle1
              LEFT JOIN tabelle2
              ON tabelle1
              .ID1=tabelle2.ID2
              LEFT JOIN tabelle3
              ON tabelle1
              .ID1=tabelle3.ID3
              WHERE tabelle2
              .ID2>=0
              AND COUNT(tabelle3.ID3) = 0
              GROUP BY tabelle1
              .ID1
              HAVING number 
              0
              ORDER BY tabelle1
              .TEXT1 ASC 

              Kommentar


              • #8
                Das COUNT() funktioniert (wie oben geschrieben) in WHERE nicht!!

                Probier:
                Code:
                SELECT
                    t1.ID1, t1.TEXT1, t2.TEXT2, COUNT(t3.ID3) AS number
                FROM
                    tabelle1 t1
                LEFT JOIN
                    tabelle2 t2 ON ( t1.ID1 = t2.ID2 )
                LEFT JOIN
                    tabelle3 t3 ON ( t1.ID1 = t3.ID3 )
                WHERE
                    t2.ID2 >= 0
                GROUP BY
                    t1.ID1, t1.TEXT1, t2.TEXT2
                HAVING
                    number > 0
                ORDER BY
                    t1.TEXT1 ASC
                Was ich übrigens sehe, was bringt die Abfrage t2.ID2 >= 0? Eine ID darf eigentlich gar nicht 0 sein können.

                Kommentar


                • #9
                  Aah geil, wenn ich das HAVING mit dem COUNT nehme, dann geht es. Danke!

                  Das >= steht da drin, weil in dem JOIN ein Hersteller gezogen wird. Und wenn der User "alle" gewählt hat, dann darf die ID da > 0 sein.

                  Danke noch mal...

                  Kommentar


                  • #10
                    Original geschrieben von DerEsWissenWill
                    Das >= steht da drin, weil in dem JOIN ein Hersteller gezogen wird. Und wenn der User "alle" gewählt hat, dann darf die ID da > 0 sein.
                    Warum dann >= wenns > sein soll?

                    Kommentar

                    Lädt...
                    X