die dritte Tabelle wird gebildet, damit man einen Artikel mehreren Kategorien zuordnen kann. Die Tabelle „Artikel_Kategorie“ verbindet Artikel und Kategorie. Ein Artikel ist einer Kategorie zugeordnet, wenn es einen Satz in dieser Tabelle gibt, die die Artikel_ID in fk_Artikel_ID und die Kategorie_ID in fk_Kategorie_ID enthält.
Die Anzahl der überhaupt vorhandenen Kategorien erhält man mit
Select count(*) from kategorie;
vorausgesetzt, dass jede Kategorie nur einmal vorkommt und dass keine alten, nicht mehr nutzbaren Kategorien vorhanden sind (logisch gelöschte Kategorien).
Auf die Hauptkategorieen schränkt man die Menge ein, indem man nur die Sätze mit categorie_parent is nil wählt:
Select count(*) from kategorie where categorie_parent is nil ;
Analog erhältman die Zahl der Artikel mit
select count(*) from artikel;
Wieviele Artikel je Unterkategorie liefert:
select hk.Kategorie_Name, uk.Kategorie_Name, count (artikel_id) from artikel a, kategorie hk, kategorie uk
where a.kategorie_id = uk.Kategorie_id
and uk.categorie_parent = hk.Kategorie_Name
and hk.categorie_parent is nil
group by hk.Kategorie_Name, hk.Kategorie_Name
Achtung! die Artikelanzahl in der Hauptkategorie ist gleich der Summe aller Artikel, die dieser Hauptkategorie direkt oder indirekt über eine Unterkategorie zugeordnet sind.
Da es keine Angabe über die Anzahl der kategorieebenen gibt, wird diese Ermittlung beliebig kompliziert, weil mit sql keine Rekursiven Abfragen in einem Schritt machbar sind.
Falls Sie dafür eine Lösung finden, wäre ich daran sehr interessiert.