Erwin: Erbitte Hilfe bei SQL - Statement

Hi,

es gibt 2 Tabellen in der perlbase

idx:

idx subject
7 Datentypen
7.1 Datentypen/Hashes
7.2 Datentypen/Strings

content:

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.

--
SELFforum - Das Tor zur Welt!
Theoretiker: Wie kommt das Kupfer in die Leitung?
Praktiker: Wie kommt der Strom in die Leitung?
  1. 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

    1. 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)

      --
      SELFforum - Das Tor zur Welt!
      Theoretiker: Wie kommt das Kupfer in die Leitung?
      Praktiker: Wie kommt der Strom in die Leitung?
    2. 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!