Hallo Klaus1,
meine ersten Versuche mit klassischem SQL über Deinen Ansatz (...) waren nicht sehr erfolgreich.
Wenn Du für die Anzahl-Ermittlung weitere Tabellen brauchst, wird es natürlich knifflig.
Ggf. kann Dir hier eine View weiterhelfen.
Aber letztlich ist es in zwei Queries auch nicht unbedingt langsamer, der Server cached die Ergebnisse. Du hast dann halt nur 2 Roundtrips zum Server, was nicht viel ausmacht, wenn SQL Server und Web Server auf der gleichen Dose laufen. Sind sie getrennt, wird's natürlich schon etwas langsamer, je nach Netzwerklatenzen beim Hoster.
Und es kann das Problem geben, dass es zwischen der ersten und zweiten Query ein Update auf die DB gibt und deine ermittelten Anzahlen dann nicht mehr stimmen. D.h. da muss eine Transaktion drumherum (was INNODB voraussetzt, mit MYISAM gibt's die nicht).
Ich bringe daher eine weitere Option ins Spiel: Handgemachtes Postprocessing.
SELECT COUNT(*) as Anzahl, Name
FROM tabelle
GROUP BY Name
ORDER BY Anzahl DESC
Das Ergebnis der Query liest Du ein und stoppst, wenn Du entweder keine Row mehr bekommst oder die Anzahl kleiner ist als die im vorigen Satz.
Rolf
sumpsi - posui - obstruxi