Passende Einträge in zweiter Tabelle zählen

Hola, Leute …

bin dabei mein Blog zu programmieren und stehe vor folgendem Problem:

Tabelle 1 - Blog-Entries
entryID, entryTitle, entryDate, ...

Tabelle 2 - Blog-Comments
entryID, commentID, commentDate, ...

Die Kommentare sind also via entryID dem jeweiligen Eintrag zugeordnet.

Jetzt moechte ich bei der Anzeige eines Eintrages gleich mitangeben, wieviele Kommentare bereits dazu existieren … soweit so schlecht, denn daran beisse ich mir jetzt schon zwei Stunden die Zaehne aus :frowning:

Zeit also, mal bei w-w-w was zu schreiben (denn die zwei Stunden habe ich u. a. mit Webrecherche zu dem Thema verbracht und nix gefunden).

Auf einen Join bin ich schon gekommen, wohl auch, dass ich ein subselect brauche (Verdammt! Ich hatte die Loesung doch irgendwann schonmal rausgefunden …)

Aktueller Stand ist folgender:

select \*
from entries,
 (select entries.entryID,count(\*) as entryComments
 from entries,comments
 group by entries.entryID) as count
where entries.entryID = count.entryID

Ist nicht sonderlich schoen und zaehlt auch nicht richtig, denn jetzt wird zu jedem Eintrag die gleiche Anzahl von Kommentaren (entryComments) ausgegeben, obwohl sie latuernich hoechst unterschiedlich sind :frowning:

Wer weiss Rat? Ich verzweifle hier naemlich …

Danke,
Th.

Also das geht so (du must nur beide Tabelle joinen, die Aggregatfunktion COUNT() verwenden und die Gruppierung angeben):

select
entries.entrytitle,
count(comments.commentid) as anz
from
entries, comments
where
entries.entryid = comments.entryid
group by
comments.entryid, entries.entrytitle;

VG, Stefan.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Alle Spalten aus Tab1 plus Count von Tab2
Hola, Stefan …

Also das geht so (du must nur beide Tabelle joinen, die
Aggregatfunktion COUNT() verwenden und die Gruppierung
angeben):

Tja, und schon merke ich, dass ich bei meiner Frage was vergessen habe :frowning:

Die Ergebnisse des selects sollen alle Spalten aus Tabelle 1 zusammen mit der Anzahl der Kommentare aus Tabelle 2 geben. So, wie ich deine Loesung verstehe, werden nicht alle Spalten aus Tabelle 1 zurueckgegeben. Und das group by verhindert, dass ich beliebige Spalten hinzufuege, oder?!

Was nun?
Th.

Hallo Th.!

Die Ergebnisse des selects sollen alle Spalten aus Tabelle 1
zusammen mit der Anzahl der Kommentare aus Tabelle 2 geben.
So, wie ich deine Loesung verstehe, werden nicht alle Spalten
aus Tabelle 1 zurueckgegeben. Und das group by verhindert,
dass ich beliebige Spalten hinzufuege, oder?!

Was nun?
Th.

Du mußt dann eben alle Spalten auch im GROUP PY wieder angeben, dann klappt’s auch mit dem Nachbarn.

Gruß,
Martin

Dann verliere ich Einträge … :frowning:
Hola, Martin …

Du mußt dann eben alle Spalten auch im GROUP PY wieder
angeben, dann klappt’s auch mit dem Nachbarn.

Leider sind nicht alle Daten in den Spalten in Tab1 eindeutig.
So dass ein GROUP BY ueber alle Zeilen dazu fuehren wuerde, dass
ich z. B. Blog-Eintraege mit identischen Titeln verlieren wuerde.
Das will ich natuerlich nicht.

Was nun?
Th.

Lieber Th.!

Es wäre doch sehr hilfreich, wenn Du die genau Tabellenbeschreibungen posten würdest…

Trotzdem hier die Lösung (mit einem Subselect):

select 
 \* 
from 
 entries, 
 (select entryID, count(\*) as commentCnt from comments group by entryID) commentCount
where
 entries.entryID = commentCount.entryID

LG, Stefan.

Danke, so klappt es …
Hola, Stefan …

das subselect als eigene Tabelle im from war der Schluessel.
Mein finales Statement sieht so aus:

select top 10
 entries.entryID as eID,\*
from entries
 left join (select
 entryID,count(\*) as commentCnt
 from comments
 group by entryID) as commentCount
 on entries.entryID = commentCount.entryID

„eID“ brauche ich nochmal, weil Access scheinbar im zurueckgegebenen Recordset das Feld entryID aus der Tabelle comments fuellt, die fuer einige Eintraege eben keine Werte enthaelt. Dann ist es leer. Mit der obigen Loesung klappt es sauber.

Vielen Dank an alle Helfer,
Th.