• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bin zu doof Max() eines Count() Ergebnisses aus einer Abfrage zu errechnen

S

sysop

Guest
Ich komme mir recht blöd vor, bekomme es aber nicht in einer zusammengefassten Abfrage gebacken.

Folgende SQL-Abfrage:
PHP:
$sql = 'SELECT DISTINCT *, count(`edit`) FROM `statistik` WHERE `edit` = \'1\' GROUP BY `adr_id` WITH ROLLUP;';
Soweit klappt das auch wunderbar, ich möchte aber nun noch den Maxwert des Ergebnisses aus count. Also quasi das (was natürlich nicht geht)
PHP:
$sql = 'SELECT *, MAX( COUNT(`edit`)) FROM `statistik` WHERE `edit` = \'1\' ;';
Also den grössten Wert aus der Ergebnistabelle.
 
so müsste es richtig sein:

PHP:
$sql = "SELECT COUNT(*), MAX(edit) FROM statistik WHERE edit = 1";
 
Nein, leider nicht.

SQL-Statement 1
( $sql = 'SELECT DISTINCT *, count(`edit`) FROM `statistik` WHERE `edit` = \'1\' GROUP BY `adr_id` WITH ROLLUP;' )
gibt mir folgendes Ergebnis:

[TABLE="class: tbloview"]
[TR]
[TD="class: top td2ov, align: right"]zeit[/TD]
[TD="class: top td2ov, align: right"]ID[/TD]
[TD="class: top td2ov, align: right"]A[/TD]
[TD="class: top td2ov, align: right"]B[/TD]
[TD="class: top td2ov, align: right"]Anzahl Edits[/TD]
[TD="class: top td2ov, align: left"][/TD]
[/TR]
[TR="class: td2ov"]
[TD="class: top, align: right"]1304578260[/TD]
[TD="class: top, align: right"]1[/TD]
[TD="class: top, align: right"]3[/TD]
[TD="class: top, align: right"]1[/TD]
[TD="class: top, align: right"]3[/TD]
[TD="class: top, align: left"][/TD]
[/TR]
[TR="class: td1ov"]
[TD="class: top, align: right"]1304941531[/TD]
[TD="class: top, align: right"]2[/TD]
[TD="class: top, align: right"]3[/TD]
[TD="class: top, align: right"]1[/TD]
[TD="class: top, align: right"]3[/TD]
[TD="class: top, align: left"][/TD]
[/TR]
[TR="class: td2ov"]
[TD="class: top, align: right"]1304941721[/TD]
[TD="class: top, align: right"]3[/TD]
[TD="class: top, align: right"]3[/TD]
[TD="class: top, align: right"]1[/TD]
[TD="class: top, align: right"]2[/TD]
[TD="class: top, align: left"][/TD]
[/TR]
[TR="class: td1ov"]
[TD="class: top, align: right"]1316508799[/TD]
[TD="class: top, align: right"]4[/TD]
[TD="class: top, align: right"]3[/TD]
[TD="class: top, align: right"]1[/TD]
[TD="class: top, align: right"]5[/TD]
[TD="class: top, align: left"][/TD]
[/TR]
[TR="class: td2ov"]
[TD="class: top, align: right"]1305013376[/TD]
[TD="class: top, align: right"]5[/TD]
[TD="class: top, align: right"]3[/TD]
[TD="class: top, align: right"]1[/TD]
[TD="class: top, align: right"]1[/TD]
[TD="class: top, align: left"][/TD]
[/TR]
[TR="class: td1ov"]
[TD="class: top, align: right"]1318330695[/TD]
[TD="class: top, align: right"]7[/TD]
[TD="class: top, align: right"]3[/TD]
[TD="class: top, align: right"]1[/TD]
[TD="class: top, align: right"]2[/TD]
[TD="class: top, align: left"][/TD]
[/TR]
[/TABLE]





in der Spalte 2 steht die id eines Datensatzes, am Ende die durchgezählten "edits". Nun möchte ich den Datensatz haben, der die meisten Edits eingetragen hat, also MAX der errechneten Spalte COUNT(edit).
Hier also Datensatz 4 mit den 5 Edits
 
Wie sieht es mit einem ORDER BY nach edits aus, und dann nimmst du per LIMIT nur ein Ergebnis?
 
Dann solltest du die Ausgabe so sortieren das der Maximalwert an erster Stelle steht.

Das erreichst du mit ORDER BY und der Anweisung ASC für aufsteigend von 0 - max oder DESC für absteigend von max - 0.
HTML:
$sql = 'SELECT DISTINCT *, count(`edit`) AS Anzahl FROM `statistik` WHERE `edit` = \'1\'  GROUP BY `adr_id` ORDER BY Anzahl DESC;'

Der 1. Datensatz ist derjenige mit den meisten Edits und so weiter in absteigeneder Folge.
 
Mit der Sortierung habe ich das nun hinbekommen, Danke.
Trotzdem würde mich interessieren, ob sich MAX mit COUNT kombinieren lässt.
 
Hallo

Ich kenne as Handbuch, danke. MAX macht mir normalerweise auch keine Probleme, es scheint aber so, dass sich Max nicht mit einem Count kombinieren lässt, da Count eine errechnete Spalte in einer Ausgabetabelle ist, auf die man nicht zugreifen kann um neuerlich Werte zu errechnen.
Der Weg scheint dann nur über eine Hilfstabelle zu führen.

Jedenfalls danke nochmal.
 
Zurück
Oben