yo,
als ergänzung zu dem bereits gesagten, noch folgende anmerkungen von mir:
die zweite abfrage aus der schleife rauszunehmen und miteinander zu kombinieren erscheint mir ebenfalls als sehr sinnvoll, ja nach design und gewünschter ergebnismenge würden sich neben joins noch unterabfragen anbieten.
deine zweite abfrage würde bei jedem anderen dbms eine fehlermeldung ausgeben, es ist die "alte" problematik mit mysql und der implementierung von group by.
ich kann den sinn für die verwendung von having bei deiner abfrage nicht erkennen, bzw. warum du überhaupt gruppierst.
wenn ich mich nicht ganz täusche, dann brauchst du nach einer gruppierten spalten nicht noch zusätzlich unter mysql sortieren, da bin ich mir aber nicht sicher.
des weiteren solltest du die abfragen zuerst immer unabhängig von dem php umfeld testen, zum beispiel über phpmyadmin oder aber wenn möglich über eine lokale testdatenbank. es macht immer sinn sinn, sich mal den ausführungsplan der beiden abfragen anzuschauen, vermutlich wird zumindestens in der zweite abfrage es zu fullscans kommen und das dann noch durch die schleife mehrmals (5x) ausgeführt.
wenn du willst kannst du ja mal einen ausschnitt deines daten-designs geben und sagen, welche ergebnismengen du haben willst, am besten immer mit beispiel-datensätzen. dann kann man die abfrage optimieren.
Ilja