Warum spuckt dieser MySQL Query nur 1 ergebnis aus?
AllesMeins
- datenbank
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
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
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/
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
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
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
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