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
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
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
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?!
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.
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.
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
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.