# SQL: Order by mit Rangliste



## deintag85 (30. Mai 2009)

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

Ich suche erstmal alle verschiedenen Elemente heraus :


```
$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 :


```
$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


----------



## kuddeldaddeldu (30. Mai 2009)

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:


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

LG


----------



## deintag85 (30. Mai 2009)

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 : 


```
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 

LG



Edit : 

Ohh ich glaub

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

hats getan. Richtig?


----------



## kuddeldaddeldu (30. Mai 2009)

Hi,



deintag85 hat gesagt.:


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



keine Ahnung, weil: 



deintag85 hat gesagt.:


> Ich hoffe ich hab mich verständlich ausgedrückt



nö. ^^

Man kann übrigens auch nach mehreren Feldern gruppieren...

LG


----------

