Philipp Hasenfratz: 2 tabellen überprüfen

Beitrag lesen

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