Count in Query
undso
- datenbank
0 undsi0 undso0 Frank (no reg)0 undso
Hi Forum,
basierend auf diese Datenbankstruktur:
http://forum.de.selfhtml.org/?t=166768&m=1087569
DBMS: mySQL 5.0.12 und 5.0.15
wollte ich fragen, ob man in einem Query mit Join auch zusätzlich einen count() problemlos ausgeben lassen kann?
SELECT
A.thema,
A.hits,
A.kommentare,
B.kommentar,
B.userid,
C.username,
count(b.newsid)
FROM
test_news AS A
LEFT JOIN (
test_newscomments AS B
INNER JOIN
test_user AS C
ON
B.userid = C.userid
)
ON
A.newsid = B.newsid;
Ich habe nun versucht die Anzahl der Kommentare zu auszugeben.
Fehlermeldung:
Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
D.h, ich muss die Ausgabe gruppieren?
Grüße
Hab mal versucht zu gruppieren.
Sobald ich nach irgendwas gruppiere, dann fügt er ja mehrere Datensätze, Resultate zusammen.
Schade, hatte ich wohl zu früh gefreut, wenn ich das mit einer Query machen könnte, bzw. wenn ich für die Anzahl der Kommentare keine eigene Spalte einfügen muss.
Grüße
Sorry, dass ich nochmal störe.
Ich hätte eine Frage zu "GROUP BY"
Sobald ich mehrere Sachen im GROUP BYE Statement eingebe:
...GROUP BYE A.thema, A.hits, A.kommentare, B.kommentar, B.userid, C.username, count(b.newsid)....
dann gruppiert er nur die Datensätze zusammen, die alle gleich sind.
Sprich alle Spalten "A.thema, A.hits, A.kommentare, B.kommentar, B.userid, C.username, count(b.newsid)" gleich sind?
Richtig?
D.h., ich könnte dann hinten in der Query alle Spalten gruppieren, die ich abfrage, somit hätte ich dann alle Datensätze mit dem count, ohne das manche Datensätze zusammengelegt werden, denn klitzegleiche Datensätze sollten nicht vorkommen, falls ja, wäre es sowieso ein Doppelposting ;)
Grüße
Hi,
nach COUNT(b.NewsId) möchtest du nicht gruppieren. Denn COUNT(*) ist bereits eine Aggregatfunktion, deren Ausgabewert du verwenden möchtest.
Das GROUP BY A.thema, A.hits, A.kommentare, B.kommentar, B.userid, C.username
bewirkt, das COUNT(...) dann alle Vorkommen in der Ergebnismenge zählt bei denen A.thema, A.hits, A.kommentare, B.kommentar, B.userid identisch sind.
Das würde aber bei dir wohl immer 1 ergeben (weil du offensichlich den Kommentar ansich auch mit ausgibst.
Vielleicht möchtest du einfach eine korrellierende Unterabfrage verwenden, keine Ahnung ob dieses MySQL schon so etwas kann:
SELECT
outer.feldA,
outer.feldB,
outer.feldC,
(SELECT COUNT(*)
FROM tabelle1 AS inner
WHERE inner.feldA = outer.feldA
AND inner.feldB = outer.feldB) AS CountOverAB
FROM tabelle1 AS outer
Probier's aus undso!
Ciao, Frank
Hey Frank, danke dir...
Vielleicht möchtest du einfach eine korrellierende Unterabfrage verwenden, keine Ahnung ob dieses MySQL schon so etwas kann:
..an Unterabfragen habe ich nicht gedacht, ich werde es gleich auch testen ;)