AllesMeins: Warum spuckt dieser MySQL Query nur 1 ergebnis aus?

Hiho,

ich bin etwas verzweifelt. Irgendwie bekomme ich den nachfolgenden Query nicht dazu die komplette Tabelle auszuspucken.

$query = "SELECT a.ID COUNT(b.ordner) as ordner FROM dl_dateien as a LEFT JOIN dl_zuordnungen as b ON a.ID = b.datei GROUP BY b.datei ORDER BY a.name";

Das ganze soll eine Art Ordnerstruktur sein. In einer tabelle stehen Informationen über alle verfügbaren dateien und in der zuordnungen in welche "Ordner" diese Dateien einsortiert sind. Nun würde ich gerne zu jeder Datei auslesen in wieviele Ordner sie einsortiert ist. Im Moment ist die Tabelle "dl_zuordnungen" noch leer, das Konstrukt müsste also zu jeder Datei 0 ausspucken. Leider gibt er mir mein Versuch nur die erste Datei in der Tabelle zurück und nicht alle.

Grüsse

Marc

  1. yoho,

    ich bin etwas verzweifelt. Irgendwie bekomme ich den nachfolgenden Query nicht dazu die komplette Tabelle auszuspucken.

    du kannst den group by nicht so benutzen, wie du es getan hast. mysql gibt zwar keine fehlermeldung aus, aber das verwirrt nur sehr stark. grundsätzlich sollten alle spalten, die mit ausgegeben werden und nicht aggregat funktionen sind, auch in der group by klausel stehen.

    Ilja

  2. Hallo AllesMeins,

    $query = "SELECT a.ID COUNT(b.ordner) as ordner FROM dl_dateien as a LEFT JOIN dl_zuordnungen as b ON a.ID = b.datei GROUP BY b.datei ORDER BY a.name";

    Hmm, bin noch nicht soo weit mit MySQL - aber liefert COUNT nicht nur eine einzige Spalte zurück, mit der Anzahl als Resultat?

    Kann aber auch gut sein dass ich mich irre, es ist schon spät und die Anfrage sieht ziemlich komplex aus... :-D

    Gute Nacht

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    http://emmanuel.dammerer.at/selfcode.html
    1. hi,

      Hmm, bin noch nicht soo weit mit MySQL - aber liefert COUNT nicht nur eine einzige Spalte zurück, mit der Anzahl als Resultat?

      statt spalte meinst du vermutlich zeile?

      und ja, COUNT() liefert eine zeile mit dem zählergebnis zurück - allerdings eine zeile für jede mittels GROUP BY herbeigeführte gruppierung von datensätzen.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hi,

        Hmm, bin noch nicht soo weit mit MySQL - aber liefert COUNT nicht nur eine einzige Spalte zurück, mit der Anzahl als Resultat?
        statt spalte meinst du vermutlich zeile?

        und ja, COUNT() liefert eine zeile mit dem zählergebnis zurück

        Nein. COUNT() liefert EINE ZAHL zurück.
        Ob das eine eigene Spalte in der Ausgabe ist, ist eine ganz andere Frage - schließlich kann das Ergebnis von COUNT() ja auch an einer Stelle Verwendung finden, die nicht ausgegeben wird (z.B. HAVING COUNT(*) > 3)

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. hi,

          Nein. COUNT() liefert EINE ZAHL zurück.
          Ob das eine eigene Spalte in der Ausgabe ist, ist eine ganz andere Frage - schließlich kann das Ergebnis von COUNT() ja auch an einer Stelle Verwendung finden, die nicht ausgegeben wird (z.B. HAVING COUNT(*) > 3)

          du bist mal wieder pedant - und hast mal wieder völlig recht.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hi,

    ich bin etwas verzweifelt. Irgendwie bekomme ich den nachfolgenden Query nicht dazu die komplette Tabelle auszuspucken.

    versuch doch einfach mal zu verstehen, was Du codiert hast:

    SELECT
    a.ID,
    COUNT(b.ordner) as ordner
    FROM
    dl_dateien as a
    LEFT JOIN
    dl_zuordnungen as b ON a.ID = b.datei
    GROUP BY
    b.datei
    ORDER BY
    a.name

    Wie man sieht adressierst Du zwei Tabellen, die mithilfe eines LEFT JOINs verbunden worden sind (die Namen der Datenfelder machen mich allerdings nicht happy). Dann mal den Inhalt der GROUP-Klausel abchecken, sollte naemlich mit den abgefragten Datenfeldern uebereinstimmen.

    Ich schlage vor, dass Du erst einmal "mit SQL" auf einer Tabelle herumhuehnerst, um dann sukzessive die verschiedenen JOINs auszutesten, natuerlich alles waherend Du Dich mit dem GROUP BY anfreundest.   ;-)

    Gruss,
    Ludger