join & max value

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

  • join & max value

    Hallo,

    ich bastle gerade an einer MySQL-Query, habe aber irgendwie ein Problem mit max()...
    Code:
    "SELECT B.boardid,B.threads,B.name,B.description,P.time,P.userid,P.threadid,U.username,P.time AS time
     	FROM ".PREFIX."boards AS B 
     		LEFT  JOIN ".PREFIX."posts AS P ON P.boardid=B.boardid 
     			LEFT JOIN ".PREFIX."user AS U ON P.userid=U.userid 
     				WHERE B.projectid='".$_SESSION['projectid']."' 
     					ORDER by B.order";
    ^^ Diese Query funktioniert wunderbar. Jetzt hätte ich noch gerne den höchsten Wert des Feldes time aus der Tabelle "posts" mit in jedem Ergebnis.

    daher:

    Code:
    "SELECT B.boardid,B.threads,B.name,B.description,P.time,P.userid,P.threadid,U.username,MAX(P.time) AS time
     	FROM ".PREFIX."boards AS B 
     		LEFT  JOIN ".PREFIX."posts AS P ON P.boardid=B.boardid 
     			LEFT JOIN ".PREFIX."user AS U ON P.userid=U.userid 
     				WHERE B.projectid='".$_SESSION['projectid']."'
     					 GROUPY by P.time
     						ORDER by B.order";
    Ich habe also MAX(P.time) eingefügt sowie GROUP by P.time, jedoch erhalte ich dann, unabhängig von der Anzahl der Einträge in der Tabelle nur noch ein Ergebnis, eben durch das GROUP by.

    Was mache ich falsch, bzw. was muss ich machen, dass "GROUP by" für jedes Ergebnis aus der ersten Tabelle zählt, nicht nur für das gesamte Ergebnis der Query?

    habe die manuals abgegrast, jedoch ohne nennenswerten erfolg...
    MySQL
    übrigens: wenn ich das GROUP by weg lasse erhalte ich die Meldung, dass man die MAX() Funktion nicht mit nicht grupierten Spalten mischen darf ohne das GROUP by statement zu verwenden...

    danke für tipps... =)

  • #2
    grundsätzlich solltest Du nach allen Single cols gruppieren...
    in Deinem Fall:

    SELECT B.boardid,B.threads,B.name,B.description,P.time,P.userid,P.threadid,U.username,MAX(P.time) AS time
    ...
    GROUP BY B.boardid,B.threads,B.name,B.description,P.time,P.userid,P.threadid,U.username
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      hehe, manchmal gibts so einfache lösungen ;-)

      danke!

      Kommentar


      • #4
        irrtum

        auf den ersten Blick sah es richtig aus, aber auf den zweiten habe ich festgestellt, dass die Werte aus der Tabelle Posts in der Ausgabe nicht mehr in dem Verhältnis sind, wie sie vorher in der Datenbank gespeichert waren:

        ich erhalte zwar den aktuellsten wert von P.time in der ausgabe, die werte P.userid und P.postid, P.threadid stimmen - stammen aber nicht aus der selben Zeile der Mysql-Tabelle ==> irgendwas läuft bei der gruppierung schief. Wenn ich aber mit einem anderen Element als boardid gruppiere erhalte ich mehr Ergebnisse als es Einträge in der Boards-Tabelle gibt...

        Ich hoffe das Problem ist einigermaßen verständlich:

        meine aktuelle query:
        Code:
        	SELECT B.boardid,COUNT(T.threadid) AS threads,B.name,B.description,
        	   T.threadid,max(P.time) AS time,P.postid,U.username
        			FROM ".PREFIX."boards AS B 
        				LEFT  JOIN ".PREFIX."threads AS T using(boardid)
        					LEFT  JOIN ".PREFIX."posts AS P using(threadid)
        						LEFT  JOIN ".PREFIX."user AS U using(userid)
        							WHERE B.projectid='".$_SESSION['projectid']."' 
        								GROUP by P.boardid
         									ORDER by B.order
        Es bestehen die Tabellen:
        boards|threads|posts|user

        gewünschtes Ergebnis:
        alle Zeilen aus "boards" mit jeweils dem neuesten zur tabelle boards gehörigen eintrag aus der tabelle posts.
        Mit der Query oben funktioniert das soweit, nur das eben die innere ordnung von posts aufgehoben wird...

        danke =)

        Kommentar

        Lädt...
        X