Problem mit komplexer Abfrage

Kerwin

Erfahrenes Mitglied
Hallo, ich habe ein kleines Problem mit einer Abfrage aus einer mysql tabelle.

Hier mal kurz beispielhaft die Struktur

PHP:
Datum |             Koordinate | Feld 1 | Feld 2 | Feld 3 | Feld 4 
=====================================================
2004-04-04 12:10:03 | 11111111  | 10 |  20 |  30 | 40
2004-04-04 12:05:03 | 22222222  | 10 |  20 |  30 | 40
2004-04-04 12:00:03 | 11111111  | 19 |  13 |  18 | 49
Wie man erkennen kann, sind manche Koordinaten doppelt vorhanden. Diese will ich zusammenfassen und zählen lassen.
Bisher mache ich das in etwa so
PHP:
$info = mysql_fertch_array(mysql_query('select * from table order by datum group by koordinate')); // Holt jede koordinate raus und fast doppelte zusammen
$number=mysql_num_rows(mysql_query('select * from table where koordinate="'.$info['koordinate'].'"')); // würde für die Anzahl der vorhanden datensätze stehen.

//Zudem will ich dann noch, das die Werte von Feld 1-4 addiert werden zu der jeweiligen group
$summe=mysql_fetch_array(mysql_query('SELECT SUM(feld1),SUM(feld2),SUM(feld3),SUM(feld4) FROM table where koordinate="'.$info['koordinate'].'"'));
Bis hier hin auch alles gut, wobei das auch sicher anders/einfacher geht als ich es gemacht habe. Könnte mir jemand evtl sagen wie ich das zu einer query vereine?

Mein Nächstes Problem betrifft das Sortieren.
Nun will ich mir gern noch eine Option basteln wo ich per mausklick sage, ordne mir das nach der häufigkeit der aufkommenden Datensätze. Sprich, wenn die Koordinate mehrfach drin vorkommt, diese addiert($number) wird und der reihe nach ausgegeben wird (63, dann 59, 40, 20, .................).
Dann bräuchte ich noch eine Funktion, oder wie auch immer, wo ich trotz des group befehls immer das aktuelleste Datum oben in der liste zu stehen habe. So wie ich es verstanden habe, nimmt der bei group irgendwie immer den ersten datensatz den er findet und die anderen werden nicht weiter beachtet, oder?

Kann man das zusammenfassen zu einer oder 2 Querys? Wenn ja wie? Wichtig ist mir vor allem das mit der $number, das nach der häufigkeit geordnet wird und auch das letzte datum beachtet wird
 
Zuletzt bearbeitet:
Code:
SELECT Koordinate, SUM(Feld1), SUM(Feld2), SUM(Feld3), SUM(Feld4), MAX(Datum), COUNT(Koordinate) AS cnt
FROM table
GROUP BY Koordinate
ORDER BY cnt DESC

So in etwa? Kann leider das gerade nicht testen, da ich von der Arbyte keinen Zugriff auf einen privilegierten mysqld habe. :(

Edit: Hab doch Zugriff bekommen - der Query bringt meines Erachtens genau das, was du willst. 'cnt' gibt die Haeufigkeit der mehrmalig vorkommenden Koordinaten aus.
 
Zuletzt bearbeitet:
dank dir,
soweit auch mit "order by cnt". Nu versuch ich anhand davon mal komplexere "order" Funktionen.

Jedenfalls danke für den tip ;)
 
Zurück