undso: Count in Query

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

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

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

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

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