Halihallo Markus
müsste hier nicht if ($value > 19) break; stehen?
ups, am ende der foreach steht noch folgendes:
$i++;
}
Stimmt. Obwohl die Lösung über die DB besser (im Sinne von performance) ist.
Ja, du bräuchtest einen Subselect (gibt's aber z. B. in mysql nicht). Falls subselects
von deinem RDBMS nicht unterstützt werden, geht's IMHO nur über zwei/mehrere Queries.bahnhof? chinesisch? also ist die lösung so schon ok?
Das folgerte ich fälschlicherweise, ja. Deine Lösung ist OK, jedoch mit dem Query meines
zweiten Postings zu verbessern (das Sortieren und Einschränken der Ergebnismenge
steigert die Performance). Ich ging fälschlicherweise davon aus, dass du auch die
einzelnen Daten der Beiträge benötigst, dies ginge nicht ohne mehrere Queries oder
Subselects (welche nicht in jedem DB implementiert sind). Wenn du nur die Top-20 Poster
ausgeben willst, sollte der Query vom zweiten Posting funktionieren (unten die
korrigierte Version).
SELECT u.*, COUNT(gb.ownerid) AS 'count'
FROM
guestbook AS gb,
user as u
WHERE
gb.ownerid=u.id
GROUP BY
gb.ownerid
ORDER BY 'count' DESC
LIMIT 0, 20
Du machst einen GROUP BY ownerid/id und zählst die Anzahl Postings jedes users. Mit dem
ORDER BY sortierst du diese und mit dem LIMIT 0, 20 selektierst du die ersten 20
Einträge (das sind dann eben diejenigen, welche am meisten gepostet haben).
Viele Grüsse
Philipp