SQL: Order by mit Rangliste

deintag85

Erfahrenes Mitglied
Hallöchen,
ich möchte eine Art Rangliste für meine Suchergebnisse erstellen.

Ich suche erstmal alle verschiedenen Elemente heraus :

Code:
$abfrage = "SELECT DISTINCT Referer as Referer FROM `".$counter."`";

Nun speicher ich jeweils den Wert Referer in eine Variable $referer und starte die nächste Abfrage.
Und nun die Anzahl der verschiedenen Elemente :

Code:
$abfragex = "SELECT COUNT(*) AnzahlReferer FROM `".$counter."` WHERE Referer='".$referer."'";

Wie kann ich das denn direkt verknüpfen, dass ich die Daten "Referer" und die Daten "AnzahlReferer" in absteigender Folge kriege? Mit 2 seperaten Abfragen kann ich das wohl auf keinen Fall realisieren.

LG
 
Hi,

mit 2 separaten Abfragen ist das vor allem auch sehr unperformant, da Du ja für jeden Referrer noch eine Abfrage machen musst. Gruppiere nach Referrer und zähle pro Gruppe (Referrer) die Einträge:

SQL:
SELECT Referrer, COUNT(*) AS Anzahl
   FROM counter 
   GROUP BY Referrer
   ORDER BY Anzahl DESC

LG
 
Sehr gut, genau das habe ich gesucht. Klappt auch prima.
Ich bin nur mit meiner Ausgabe unzufrieden. Und zwar macht mein Counter bei jedem Reload einen neuen Eintrag damit ich so die Seitenaufrufe zählen kann.

Das verfälscht nun mein Ergebnis ein wenig, da er mir die Anzahl der gleichen Daten anzeigt und nicht Anzahl der gleichen Daten von verschiedenen IP's. Dazu kommt dann ein drittes Feld in der SQL hinzu. Die IP Adresse

Ich brauch also eine Abfrage ähnlich dem von dir :

Code:
SELECT Browser, COUNT(*) AS Anzahl FROM `".$counter."` GROUP BY Browser ORDER BY Anzahl DESC

Welches aber die Anzahl der Browser zu verschiedenen IP's ausgibt und nicht die Gesamte Anzahl aller verschiedenen Browser. Denn das wäre irgendwann eine zu grosse Zahl....

Ich hoffe ich hab mich verständlich ausgedrückt :rolleyes:

LG



Edit :

Ohh ich glaub
Code:
SELECT Browser, COUNT(DISTINCT IP) AS Anzahl FROM `".$counter."` GROUP BY Browser ORDER BY Anzahl DESC

hats getan. Richtig?
 
Zuletzt bearbeitet:
Zurück