Maik W. aus E.: Ergebnismenge erneut sortieren - die Lösung

Beitrag lesen

Tach auch globe,

Selektiere mir genau die fünfzig häufigsten Suchanfragen und sortiere diese nach den meisten Treffern / nach dem Alphabet.

Wenn ich dich recht verstehe, willst du die Top 50 Datensätze nach Namen (statt Häufigkeit/Gewicht) sortiert haben. Dazu musst du in diesem Fall etwas umdenken. Es ist nicht möglich eine Menge von Datensätzen gleichzeitig nach 2 verschiedenen Kriterien zu sortieren (wobei hier kontrahierende Sortierung, nicht verfeinernde Sortierung gemeint ist!).

Genau so weit war ich, deswegen habe ich ja meine Versuche mit Union gemacht...

Dementsprechend brauchst du eine Abfrage, um deine Top 50 Datensätze zu finden und eine weitere Abfrage, die die gefundenen Datensätze deinen Wünschen gerecht sortiert liefert.

Exakt!

Ein Beispiel mit SubQuery:

SELECT query, SUM(anzahl) as wieviel, COUNT() as anzahl
FROM tabelle
WHERE query IN (
  SELECT query
  FROM tabelle
  GROUP BY query
  ORDER BY SUM(anzahl) DESC, COUNT(
) DESC
  LIMIT 50 /* <- wird von MySQL5 als fehler angesehen /
)
ORDER BY query ASC /
gehe mal von aus, dass du nach query sortieren willst */

Nur für's Protokoll/ Archiv:  
  
Wenn das Statement von Fehlern bereinigt ist  
  
~~~sql
  
SELECT query, SUM(anzahl) as wieviel, COUNT(*) as anzahl  
FROM tabelle  
WHERE query IN (  
  SELECT query  
  FROM tabelle  
  GROUP BY query  
  ORDER BY SUM(anzahl) DESC, COUNT(*) DESC  
)  
GROUP BY query  
ORDER BY query ASC  
LIMIT 50  

läuft die Anfrage in ein Timeout, auf dem lokalen Testserver ohne Beschränkung rechnet es 112 Sekunden... nicht so performant.

Ein Beispiel mit SubQuery-Relation:

SELECT t.*
FROM (
  SELECT query, SUM(anzahl) as wieviel, COUNT() as anzahl
  FROM tabelle
  GROUP BY query
  ORDER BY wieviel DESC, anzahl DESC
  LIMIT 50 /
<- kann von MySQL5 als fehler angesehen werden /
) AS t
ORDER BY t.query ASC /
gehe mal von aus, dass du nach query sortieren willst */

Genau das ist es!  
  

> Wenn du jedoch lediglich zuerst nach Häufigkeit/Gewicht und dann nach Namen sortieren willst, bist du mit Iljas Anfrage bestens bedient. Da brauchst du in der ORDER BY Klausel nur noch das Feld \_anhängen\_ nach dem (der Häufigkeit/Gewicht untergeordnet) sortiert werden soll.  

Das macht nicht viel Sinn, weil die alphabetische Sortierung nur dann greift, wenn die Häufigkeit exakt gleich ist (was bei meinen Daten \_gar\_ nicht vorkommt).  
  
Besten Dank und Gruß an den großen See...  
  
  
<http://www.gruss-aus-essen.de>  
  
Maik

-- 
![Diese Dauerleihgabe wird Ihnen präsentiert von ROMY!](http://www.gruss-aus-essen.de/selfforum/totes_huhn.jpg)  
Maik. W. aus E. sagt Dankeschön ;-)