Anna: intelligender Query: Ebenen von Kategorien...

Moin,

irgendwie komme ich an diesem Problem einfach nicht weiter.
In einer Tabelle für Kategorien, deren Daten importiert werden, sind Einträge wie die Folgenden enthalten. Zudem wird für jeden Eintrag auch noch die Ebene angegeben, also ob es eine Hauptkategorie (Ebene 1), Unterkategorie (2) usw. ist:
Kategorie1 (1)
Kategorie1|Unterkategorie1 (2)
Kategorie1|Unterkategorie1|Unterunterkategorie1 (3)
Kategorie2|Unterkategorie2_1|Unterunterkategorie2_1 (3)

Nun lasse ich mit einem Query wie z.B.
select kategorie_bezeichnung from tab where ebene=1;
die Bezeichnungen der Hauptkategorien auslesen.
Doch leider existiert beispielsweise für Kategorie2 kein Eintrag speziell für die Ebene 1, sondern nur der Eintag für die tiefer gelegene Unterunterkategorie2_1.
Folglich wird Kategorie2 nicht in der Auswahl aufgeführt.

(Wen es interessiert: Es existiert kein Eintrag dafür, da in der Haupt-"Kategorie2" selbst kein Kontent vorhanden ist, sondern nur für die Unterunterkategorie2_1... Es ist also eigentlich keine Schlamperei...)

Nun müsste ich also irgendwie genau diejenigen (Unter)Kategorien "finden", für die kein Hauptkategorie-Eintrag existiert, sodass diese dennoch aufgelistet werden kann. Dies in einem 2. Query unabhängig vom ersten zu tun, wäre kein Problem; doch wie sollte dieser in etwa aussehen?
Irgendwie stehe ich hier gerade auf dem Schlauch und finde keine geeignete Lösung die sich ressourcen-sparsam umsetzen lässt.

Daher komme ich auf Euch zu und hoffe - auch wenn ich es keinem wünsche - dass schonmal einer selbiges Problem hatte und daher einen Tipp oder Ansatz posten könnte.

Vielen Dank.

  1. Hi,

    Daher komme ich auf Euch zu und hoffe - auch wenn ich es keinem wünsche - dass schonmal einer selbiges Problem hatte und daher einen Tipp oder Ansatz posten könnte.

    Ja ich hatte schon mal vor Jahren ähnliche Probleme und habe dann
    aber schnell erkannt, dass der Aufbau der Kategorientabelle
    von vornerein zum scheitern verurteilt ist.

    Wenn ich deine Tabelle richtig verstehe, funktioniert die so:

    Jedes Feld entspricht einer Kategorie bzw Unterkategorie, oder ?

    Somit ist schon mal die Anzahl der Kategorien limitiert, da du ja nicht endlos Felder dranhängen willst.

    Es gibt nun unzählige Möglichkeiten die ganze Sache anders aufzuziehen daher muss jeder für sich rausfinden was die Beste ist.

    Ich nutze zb. genau 3 Felder für eine Kategorienliste.
    id | cat | catfrom

    Wobei das letzte Feld mir Auskunft gibt ob und wenn ja wovon
    diese Kategorie eine Unterkategorie ist.

    carpe diem
    Pia

    1. Ich nutze zb. genau 3 Felder für eine Kategorienliste.
      id | cat | catfrom

      Wobei es auch Vorteile hat, wenn die max. Verschachtelungstiefe bekannt ist, mit bspw. 3 Datenfeldern zu kommen. Dreistufige Hirarchien reichen oft aus, sind auch ziemlich ergonomisch.

    2. Guten Abend,

      Ich nutze zb. genau 3 Felder für eine Kategorienliste.
      id | cat | catfrom

      Den rekursiven Aufbau halte ich in meinem Fall für zuviel des Guten. Schließlich sind diese (fehlenden) Kategorien an sich ja uninteressant nachdem für diese keine Inhalte existieren.
      Jedoch müssen sie dennoch (zumindest zur Laufzeit) ergänzt werden - wenn auch nicht in der DB selbst - sodass die Unterkategorien, die eben den Kontent haben, auch gefunden werden.

      1. Wie sind die Kategorien denn in den DB genau hinterlegt? Wieviele Datenfelder, Beispieldaten?

        1. Wie sind die Kategorien denn in den DB genau hinterlegt? Wieviele Datenfelder, Beispieldaten?

          _kategorie (=ID), bezeichnung, ebene, datum (zuletzt aktualisiert/timestamp), kontent

          Beispieldaten wären die im ursprünglichen Posting angesprochenen, da diese den "Mangel" klarmachen.

  2. _kategorie (=ID), bezeichnung, ebene, datum (zuletzt aktualisiert/timestamp), kontent

    Kategorie1 (1)
    Kategorie1|Unterkategorie1 (2)
    Kategorie1|Unterkategorie1|Unterunterkategorie1 (3)
    Kategorie2|Unterkategorie2_1|Unterunterkategorie2_1 (3)

    Nun lasse ich mit einem Query wie z.B.
    select kategorie_bezeichnung from tab where ebene=1;
    die Bezeichnungen der Hauptkategorien auslesen.

    Wenn die Namensgebung konsistent ist, dann ist die Information extrahierbar. Wo ist das Problem?

    Doch leider existiert beispielsweise für Kategorie2 kein Eintrag speziell für die Ebene 1, sondern nur der Eintag für die tiefer gelegene Unterunterkategorie2_1.

    Das ist ganz schlecht, Du hast ein Datenproblem, editiere die Datensätze zurnot händisch.

    Nun müsste ich also irgendwie genau diejenigen (Unter)Kategorien "finden", für die kein Hauptkategorie-Eintrag existiert, sodass diese dennoch aufgelistet werden kann. Dies in einem 2. Query unabhängig vom ersten zu tun, wäre kein Problem; doch wie sollte dieser in etwa aussehen?

    Ein SELECT mit Sortierung? Einfach mal drüberschauen, hoffe mal, dass es nicht gleich tausende Datensätze sind.