Erbitte Hilfe bei SQL - Statement
Erwin
- datenbank
Hi,
es gibt 2 Tabellen in der perlbase
idx subject
7 Datentypen
7.1 Datentypen/Hashes
7.2 Datentypen/Strings
idx id subject (time body...)
7.1 1 Hash nach Werten sortieren
7.2 1 Strings verketten
Die Tabelle idx ist der Index für die Dokumentenablage und es gibt Unterkategorien, idx ist der primaryKey.
Die Tabelle content beinhaltet die einzelnen Dokumente der Kategorien. Dabei sind content.idx und content.id jeweils der Primary key für ein Dokument, content.idx ist der foreign Key der die referentielle Integrität eines jeden Dokuments im Index herstellt. Soweit sogut.
Zum Browsen des Inhaltsverzeichnisses mache ich derzeit ein
"SELECT idx,subject from idx ORDER BY subject"
und gebe den Index aus mit den Kategorien als Links zum Klicken. Nun möchte ich, dass hinter jeder Kategorie die Anzahl der Dokumente angezeigt wird, also baute ich mir das folgende Select:
SELECT idx.idx, idx.subject, content.idx, count(content.idx) FROM idx, content WHERE idx.idx=content.idx
GROUP BY content.idx
ORDER BY idx.subject
Aber wie dumm: In Kategorie 7 gibts noch keine Dokumente, also erscheint diese Kategorie auch nicht im Abfrageergebnis.
Wie muss die SQL Abfrage lauten dass die Kategorie "Datentypen" im Abfrageergebnis angezeigt wird, obwohl es da noch keine Dokumente gibt?
Siehe http://perlbase.xwolf.de/
Gruss, Rolf
Die Abfrage muss auf beide Tabellen erfolgen, der Name der Kategorie ist
idx.subject
und count() muss in der Table content über content.idx erfolgen.
Halihallo Erwin
SELECT idx.idx, idx.subject, content.idx, count(content.idx) FROM idx, content WHERE idx.idx=content.idx
GROUP BY content.idx
ORDER BY idx.subject
GROUP BY idx.idx
auch wenn dasselbe rauskommt, ist es treffender, da du die
content.idx zählst.
Aber wie dumm: In Kategorie 7 gibts noch keine Dokumente, also erscheint diese Kategorie auch nicht im Abfrageergebnis.
Richtig.
Wie muss die SQL Abfrage lauten dass die Kategorie "Datentypen" im Abfrageergebnis angezeigt wird, obwohl es da noch keine Dokumente gibt?
Du suchst den LEFT OUTER JOIN
Falls keine entsprechenden Datensätze in content sind, wird
content.idx mit NULL gefüllt, die Kategorie also "gesehen", aber NULL
wird von COUNT nicht gezählt => 0 Elemente in Kategorie.
Viele Grüsse
Philipp
Hallo Philipp,
vielen Dank!
Wie muss die SQL Abfrage lauten dass die Kategorie "Datentypen" im Abfrageergebnis angezeigt wird, obwohl es da noch keine Dokumente gibt?
Du suchst den LEFT OUTER JOIN
Falls keine entsprechenden Datensätze in content sind, wird
content.idx mit NULL gefüllt, die Kategorie also "gesehen", aber NULL
wird von COUNT nicht gezählt => 0 Elemente in Kategorie.
Bisher hab ich mich vor diesen JOIN's immer gefürchtet ;-)
Das wird sich wohl ändern müssen....
Viele Grüße, Rolf (Erwin)
Hi Philipp;
cool:
SELECT content.idx, idx.idx, idx.subject, count(idx.idx) FROM idx
LEFT OUTER JOIN content ON idx.idx=content.idx
GROUP BY idx.idx
ORDER BY idx.subject;
Nochema danke!
Erwin
SQL is geil!