# Abfrage gruppieren



## switchy (10. November 2004)

Hallo,

ich möchte in meinem Forum die Ausgabe der Beiträge so gruppieren, dass ich immer den Beitrag auf den die letzte Antwort eingegangen ist ganz oben stehen habe. Hab es mit folgendem Befehl versucht, bekomme aber nicht alle Einträge mit der höchsten (Autoren-)id eines Themas angezeigt:  

SELECT id, titel, antwortid, autor, MAX( id ) AS max_id
FROM er_sucht_sie
WHERE antwortid !=0
GROUP BY antwortid DESC


----------



## x_Red_Eagle_x (12. November 2004)

Lass mal die  MAX( id ) AS max_id weg

mfg


----------



## mage (12. November 2004)

Beim Gruppieren werden Datensätze zusammengefasst und so können über einzelne Spalten Aggregatfunktionen durchgeführt werden, wie Min, Max, Sum oder Count.

Was du erreichen möchtest scheint mir eher eine Sortierung.
Absteigend sortieren kann man mit ORDER BY Spaltenname DESC.
Aufsteigend mit ASC.

Dein Bespiel
SELECT id, titel, antwortid, autor
FROM er_sucht_sie
WHERE antwortid <>0
ORDER BY id DESC


----------



## switchy (12. November 2004)

x_Red_Eagle_x hat gesagt.:
			
		

> Lass mal die  MAX( id ) AS max_id weg
> 
> mfg



so hab ich es auch schon versucht, dann bekomme ich von 4 gruppierten Datensätzen 2 mit der letzten antwort auf den beitrag und 2 mit der ersten antwort auf den beitrag ausgegeben. 




			
				mage hat gesagt.:
			
		

> .
> 
> Dein Bespiel
> SELECT id, titel, antwortid, autor
> ...



wenn ich hier noch eine funktionierende gruppierung reinbringen könnte wäre es perfekt.


----------



## melmager (13. November 2004)

also eine SQL Anweisung wird immer von links nach rechts abgearbeitet und es ist leider nicht möglich
innerhalb von group by zu sortieren - erst werden die gruppen erstellt dann sortiert

beispiel:
wert gruppe info
1 3 a
5 3 b
3 3 c
4 5 d
7 5 e
1 5 g

ein select max(wert) as hi,wert,info from tabelle group by gruppe order by hi
wird sowas rauswerfen:
5 1 a 
7 4 d  

leider kommt man so nicht an die info b innerhalb der gruppe 3 heran :-(
und so wie deine Frage verstanden habe möchtest du das aber ....

Das lässt sich nur mit einem Subselect machen - nur wenn du mysql 3.x hast entfällt das wegen Bodennebel.


----------



## switchy (13. November 2004)

melmager hat gesagt.:
			
		

> Das lässt sich nur mit einem Subselect machen - nur wenn du mysql 3.x hast entfällt das wegen Bodennebel.



Das hört sich recht gut an. Wie müsste ich denn dann meine Abfrage schreiben?


----------

