Sven Rautenberg: JOIN oder WHERE

Beitrag lesen

Moin!

Habe bisher folgenden Ansatz:

Hervorragend. Damit kann man arbeiten.

select a.firstname, a.lastname from USER as a
LEFT JOIN ARTICLE as b on a.id=b.userid
ORDER BY time DESC

Zunächst mal: Ausgangslage ist, dass ein Artikel vorliegt. Deshalb würde ich als erstes mit der Artikel-Tabelle anfangen. Als Alias ist ein "a" ganz gut (a wie artikel). Die User-Tabelle kriegt den Alias u.

SELECT * (kommt noch) FROM article as a LEFT JOIN user as u ON a.userid = u.id

Allen geschriebenen Artikeln werden jetzt jeweils die Benutzerdaten zugeordnet.

Damit doppelte User-IDs nur einmal auftreten, muß man gruppieren. Und sich entscheiden, welcher Wert aus den vielen Zeilen, die zusammengefaßt werden, genommen werden soll.

SELECT COUNT(u.id) as artikelzahl, MAX(a.time) as lastarticle, a.userid, u.firstname, u.lastname, FROM article as a LEFT JOIN user as u ON a.userid = u.id GROUP BY a.userid ORDER BY lastarticle DESC

Es kann dir dabei aber passieren, dass deine Datenbank über die Verwendung von u.firstname und u.lastname meckert. So in der Art "keine Aggregatfunktion verwendet, obwohl GROUP BY benutzt wird".

- Sven Rautenberg

--
Die SelfHTML-Developer sagen Dankeschön für aktuell 20885,68 Euro Spendengelder!