Philipp Hasenfratz: Query an mehrere Tabellen

Beitrag lesen

Halihallo Bernd

Die Wert aus Tabelle x und y mit der selben id gehören zusammen. Bei x und y sind die id einzigartig, es gibt nur eine Reihe mit der gleichen id. Aber bei Tabelle z gibt es mehrere Reihen mit der gleichen id.

Aha, man kann also sagen, dass x.id der PRIMARY KEY von x ist und
y.id zumindest ein Schlüsselkandidat von y. Gut, das ist wichtig zu
wissen. Frage: warum ist y.id nicht auch ein PRIMARY KEY?

Wofür das ganze?

Wenn du mein erstes Posting erneut genau liest, wirst du verstehen,
warum das sehr wichtig ist. Um es nochmals zusammenzufassen: Wenn du
einen Join über drei Tabellen hast und diese in keiner 1:1 Beziehung
zueinander stehen, bekommst du beim Gruppieren nach einem Primary Key
und einem COUNT() das Produkt aus den zutreffenden Records aus y und
z. Weisst du jedoch, dass x.id=y.id und beide id's eindeutig sind und
in Beziehung stehen (1:1), liefert ein COUNT() die Anzahl treffender
Einträge aus z und *das* ist es, was du möchtest; vorangehend mussten
wir jedoch *wissen*, ob x und y in einer 1:1 Beziehung stehen.

In x und y will ich Blogs speichern und in z die Comments dazu. Mit dem Query soll also der Blog aus x und y ausgelesen werden und bei z gezählt werden wieviele Comments es dazu gibt.

Also:

SELECT
    x.id, x.name, x.datum, y.text, COUNT(*) AS 'AnzahlKommentare'
FROM
    x,y,z
WHERE
    x.id=y.id AND
    x.id=z.id
GROUP BY
    x.id,x.name,x.datum,y.text
ORDER BY
    x.datum DESC
LIMIT
    3

Viele Grüsse

Philipp