[MySQL] Sortierung bei GROUP BY

2TAKTER

Lt. Junior Grade
Registriert
Okt. 2005
Beiträge
399
Hallo ich habe eine Tabelle mit folgendem Inhalt:

Code:
+----------------+---------+------------+------------+                                               
| fr_timestamp   | fr_user | fr_page_id | fr_quality |                                               
+----------------+---------+------------+------------+                                               
| 20091203130702 |      20 |       2039 |          0 |                                               
| 20091203130631 |      20 |       2039 |          0 |                                               
| 20091203130146 |      20 |       1334 |          0 |                                               
| 20091203130136 |      20 |       1334 |          1 |                                               
| 20091112083907 |      20 |       1125 |          0 |

wenn ich nun folgenden befhel ausführe kommt folgendes ergebnis:
Code:
mysql> select fr_timestamp,fr_user,fr_page_id,fr_quality from flaggedrevs group by fr_page_id order by fr_timestamp DESC;
+----------------+---------+------------+------------+                                                                   
| fr_timestamp   | fr_user | fr_page_id | fr_quality |                                                                   
+----------------+---------+------------+------------+                                                                   
| 20091203130631 |      20 |       2039 |          0 |                                                                   
| 20091203130136 |      20 |       1334 |          1 |                                                                   
| 20091112083907 |      20 |       1125 |          0 |

prinzipiell macht die abfrage das, was sie soll. die page_id unique ausgeben inklusiver aller anderen werte. nur leider nimmt es immer den ersten wert wie man am timestamp erkennt. ich möchte aber immer den neueren. hab schon mit DESC und ASC herum gespielt, aber nichts hilft. hat jemand eine idee?
 
Versteh ich nicht ganz. Was fürn Datentyp hat denn deine Timestamp Spalte? Sieht mir nicht nach Datumsformat aus. Und ich hab eigentlich auch nicht so richtig verstanden, was dein Problem ist.
 
Ah ich weiß was sein Problem ist. Er Gruppiert die IDs und der Timestamp der Gruppierung ist immer der erste Wert und nicht der Neuste. Alles klar. Hm Probier mal das ORDER BY vor das GROUP BY zu setzen. Eigentlich funktioniert GROUP BY xyz DESC bei deiner Abfrage ja, nur halt nachdem er Gruppiert hat.
 
GROUP BY sollte man nur in Verbindung mit Funktionen wie COUNT oder MIN verwenden! Das sollte auch gleich die Lösung sein:
PHP:
SELECT MAX(fr_timestamp), fr_user, fr_page_id, fr_quality FROM flaggedrevs GROUP BY fr_page_id ORDER BY fr_timestamp DESC;
 
Zuletzt bearbeitet: (MAX natürlich und nicht MIN für den neusten Timestamp)
Ich weiß zwar nicht, bei welcher Spalte du das haben willst, aber versuchs mal mit MAX(Spalte)
 
Das GroupBy wird, wie schon vorher gesagt, nur in Verbindung mit Aggregat-Funktionen alla Count, Min, Max und soweiter verwendet. Mag sein das dein Befehl bei MySql fehlerfrei ausgeführt wird, jedoch ist dies bei anderen DBMS nicht immer so!

Ich würde das wohl eher so machen (nur mal so ins blaue reingetippt...)
Code:
SELECT B.* 
FROM (SELECT fr_page_id,MAX(fr_timestamp) fr_timestamp FROM flaggedrevs GROUP BY fr_page_id) A
JOIN flaggedrevs B ON B.fr_page_id=A.fr_page_id AND B.fr_timestamp=A.fr_timestamp
 
Zurück
Oben