Datensatz mit den meisten werten=xxx selectieren

_voodoo

Erfahrenes Mitglied
Hi Guys,

leider fiel mir grad keine bessere Umschreibung für mein Problem ein.
Ich würd gerne den Datensatz auswählen, bei dem eine bestimmte
Spalte am häufigsten den gleichen Wert hat.

z.B.:
-wertx
-wertx
-werty
-werty
-werty
-wertz

Nun würd ich gerne als Ergebnis eine 3 haben, weil werty ja 3mal da
ist als Maximum.
 
SELECT COUNT(id) AS werteanzahl FROM tabelle GROUP BY wertespalte ORDER BY werteanzahl

=> ungestestet - müsste aber in die Richtung gehen!
 
Hm irgendwie dockt das nicht so ... :(

rekord.JPG

PHP:
$rekord = mysql_query ("select count(date) as `total` from `counterhits` group by 'date' order by 'date'");		
$rekordresult = mysql_fetch_array ($rekord);
echo $rekordresult['total'];

Gibt 12 aus :(
 
Was ja auch logisch ist, da count() ja auch nur die Anzahl der Einträge zählt, für die die where Klausel gilt.
Du könntest erstmal ein select machen, wo Du Dir alle Ergebnisse gruppiert ausgeben lässt und lässt diese dann durch eine Schleife laufen, um die Anzahl herauszubekommen, die die gleichen Werte (wertx, werty, ...) haben.
Dann schaust Du, wer die meisten Einträge hat und lässt diese dann anzeigen.

redlama
 
Die Idee hat ich auch schon, nur ich poste das nicht umsonst
im Datenbankforum, weil ich mir denke dafür muss auch eine
Datanbankabfrage geben.
 
Hallo!

Schreibe deine Spaltenname nicht in Hochkommas. Also date statt 'date'. Dann müsste das klappen. Dein SQL-Statement müsste wie folgt aussehen:
PHP:
$rekord = mysql_query ("select count(date) as total from counterhits group by date order by total desc");
 
Mit den "Hochkommas" quotest du die Spaltennamen, das ist nötig wenn du z.B. Spaltennamen hast die identisch mit BEfehlen sind(z.B. Alter), daher ist das ok.
Ich weiß nicht ob es funktioniert aber bringt ein Max hier etwas. ein einfachere Befehl wird dir sicher nicht die Lösung bringen dafür ist das zu komplex aber mit MAX sollte man doch weiterkommen:
WHERE max(count(id)) oder so..
 
Zuletzt bearbeitet:
Was bringt denn
PHP:
$rekord = mysql_query ("select count(id) as `total` from `counterhits` group by 'date' order by 'date'");		
$rekordresult = mysql_fetch_array ($rekord);
echo $rekordresult['total'];
?
 
@KristophS: Also bei meiner Oracle-DB liefert das unterschiedliche Ergebnisse, wenn ich den Spaltennamen bei "GROUP BY" in Hochkommas setze, bzw. diese weglasse. Mit Hochkommas erhalte ich ein Ergebnis-Datensatz mit der Anzahl der Datensätze der Tabelle insgesamt. Darum liefert es meiner Meinung nach bei _voodoo auch 12 zurück.

Wenn das mit date nicht funktioniert, kannst du ja stattdessen auch counterhits.date verwenden.

// EDIT: Wenn du dann nur einen Ergebnisdatensatz haben willst müsste der Befehl müsste so aussehen:

PHP:
$rekord = mysql_query ("select max(anzahl) from 
(select count(counterhits.date) as anzahl 
from counterhits group by counterhits.date)");
 
Zuletzt bearbeitet:
_voodoo hat gesagt.:
PHP:
$rekord = mysql_query ("select count(date) as `total` from `counterhits` group by 'date' order by 'date'");		
$rekordresult = mysql_fetch_array ($rekord);
echo $rekordresult['total'];

Gibt 12 aus :(

Um mich mal selbst zu zitieren :)

Bzgl. des MAX(): Wenn ich diese (in meinen Augen verdammt
schlechte) Doku richtig verstanden habe kann man damit leider
nur den höchsten Wert ermitteln.
 

Neue Beiträge

Zurück