[MySQL] Häufigkeit einer Zahl in einer Spalte bestimmen

rony

Commodore Pro
🎅Rätsel-Elite ’10
Registriert
Jan. 2007
Beiträge
4.973
Hallo,

Ich schildere erstmal worum es geht, unten steht das Problem ^^
ich bin dabei ein kleines php-script zu basteln mit dem User einträge "Lesenswert" bewerten können.
Jeder User drückt auf den Button un der mysql Datenbank wird ein Eintrag erstellt (fortlaufende ID | Eintrags ID | User ID)

so alles kein problem, funktioniert super...

Wenn ich also anzeigen will, wieviele user diesen beitrag toll finden, dann lasse ich einfach die gesammtzahl der Suchergebnisse der Eintrags ID anzeigen... (x leute empfehlen diesen beitrag)

nun habe ich aber noch eine Übersicht der Einträge, an der das angezeigt werden sollte.

Da diese übersicht jedoch eine etwas komplexe tabelle ist, wollte ich nicht noch eine Zahl einbauen, sondern mit einem farblichem indikator arbeiten.

dieser sollte sich von weiß langsam ins blaue färben - relativ zu den bewertungen.

Sagen wir mal es gäbe drei Beiträge

[eins] hat keine bewertung
[zwei] hat eine bewertung
[drei] hat zwei bewertungen

Dann würde Beitrag [eins] keine farblichen inikator anzeigen (weiß), nummer zwei eben nur einen blauen mit 50% deckkraft und nummer drei einen mit 100% deckkraft.

Die Bewertungen anderer Beiträge haben also einfluss auf die Deckgraft des eigenen Farblichen indikators....

Und hier komme ich nun zu meinem Problem...

Ich muss also bei jedem Beitrag wissen wie häufig ein jeder andere Beitrag als Lesenswert empfohlen wurde.
Nun kann ich ja aber nicht ständig eine Suchanfrage mit einer liste an zahlen durchlaufen.

Gibt es unter mysql eine möglichkeit relativ gut festzustellen wie oft eine zahl in einer spalte vorkommt?

Ich hoffe es ist soweit klar geworden :) - ansonsten fragen
 
Jau, das sieht gut aus :)

mein Syntax den ich verwende:

PHP:
SELECT count(  *  ) FROM  `worth` WHERE 1 GROUP  BY top_ID
 
ich bins nochmal... :/

nja... ich bekomme die anzeige innerhalb von phpmyadmin super hin... nur weiß ich jetzt gerade nicht mehr weiter ^^

(ich füge jetzt einfach mal die ausrede ein - dass ich 37Grad fieber habe :) )

es wird ja nun eine schöne liste angezeig, wie häufig welche zahl vokommt... nur soll ja jetzt die höchste zahl als 100% angesehen werden, und alle weiteren abwerten - dazu muss ich ja einmalig nur die höchste zahl finden der rest sollte sich errechnen lassen...

tut mir leid für die vieleicht wirklich etwas blöde frage... aber ich hab wirklich fieber ^^
 
Du kannst ja mal überprüfen, ob der von dir verwendete SQL Server eine Funktion dafür anbietet, ich würde es aber bezweifeln. Das ist im Normalfall nicht Aufgabe des SQL Servers. Das musst du bei dir in der Anwendung lösen.

Erstelle z.B. bei dir in der Anwendung eine Variable MaxCount und weiß dem den höchsten Wert aus dem SQL Record Set zu (sollte der erste Eintrag sein, da vorsortiert). Anschließend kannst du jeweils nach Bedarf den Prozentwert auf Basis des MaxCount und des aktuellen Count wertes errechnen.

Eine weitere Alternative wäre eine zweite Abfrage an den SQL Server (die vorherige am besten so anpassen, dass du nur noch den einen TOP Wert ausgeliefert bekommst), wo du erneut die aktuelle Abfrage absetzt und anschließend mit einer der SQL Funktionen (musst schauen was es so gibt) den einmal ausgelesenen MaxCount (vorherige SQL Abfrage) als Variable verwendest um dynamisch pro Zeile den Quotienten auszurechnen.
 
ich habe mal das probiert

SELECT MAX(counted) FROM ( SELECT COUNT(*) AS counted FROM `worth` WHERE 1 GROUP BY top_ID ) as counts;

scheint erstmal zu funktionieren.... hab es bis jetzt aber nur unter phpmyadmin ausprobiert....
 
Eleganter wäre es, wenn du vlt. ein SELECT TOP COUNT() machen könntest, weiß aber nicht ob das mit GROUP BY funktioniert.
 
Zurück
Oben