Andreas D.: Seiten in der richtigen Hierarchie ausgeben

Guten Tag,

an alle Datenbakfreaks und Experten!

ich habe in meiner Datenbank meine Seite mit je einer ID und einer zuID abgelegt:

Id, Titel, ZuID

1-Titel-0

2-Titel-0

3-Titel-0

4-Titel-1

5-Titel-1

6-Titel-2

es geht maximal 3 Ebenen in die Tiefe.

Das Ergebnis sollte dann so aussehen:

1-Titel-0

----4-Titel-1

----5-Titel-1

2-Titel-0

----6-Titel-2

3-Titel-0

die erste Ebene meiner Struktur frage ich mit

SELECT Id,Titel,ZuId FROM seiten WHERE ZuId=0 ORDER BY Titel

ab.

So bekomme ich alle Hautseiten

Wie ist es möglich auch die Unterseiten abzufragen?

Andreas

  1. Tach!

    So bekomme ich alle Hautseiten
    SELECT Id,Titel,ZuId FROM seiten WHERE ZuId=0 ORDER BY Titel
    Wie ist es möglich auch die Unterseiten abzufragen?

    SELECT Id,Titel,ZuId FROM seiten ORDER BY Titel

    Das ist sicher nicht das was du möchtest, deswegen solltest du die Frage präziser stellen.

    dedlfix.

    1. Tach zurück dedlfix.

      Das ist sicher nicht das was du möchtest, deswegen solltest du die Frage präziser stellen.

      Ich möchte meine ganzen Seiten ausgeben sortiert nach der Id und mit allen Unterseiten.

      Ich habe mir gedacht, das ich zuerst die erste Ebene abfrage!

      SELECT Id,Titel,ZuId FROM seiten WHERE ZuId=0 ORDER BY Titel

      und dann irgendwie die Unterebenen, so das als Ergebniss so eine Ausgabe kommt.

      1-Titel-0

      ----4-Titel-1

      ----5-Titel-1

      2-Titel-0

      ----6-Titel-2

      3-Titel-0

      1. Tach,

        Ich möchte meine ganzen Seiten ausgeben sortiert nach der Id und mit allen Unterseiten.

        Ich habe mir gedacht, das ich zuerst die erste Ebene abfrage!

        SELECT Id,Titel,ZuId FROM seiten WHERE ZuId=0 ORDER BY Titel

        und dann irgendwie die Unterebenen, so das als Ergebniss so eine Ausgabe kommt.

        musst du das Problem in der Datenbank lösen? Ich würde das Zuordnen der Ebenen eher erst nach der Abfrage machen, weil mir keine Lösung einfällt, bei der die Menge an Ebenen dynamisch wäre.

        Eine Datenbanklösung wäre (sofern man nicht mehr als 10 Elemente pro Ebene hat):

        SELECT a.*
         FROM seite AS a
         LEFT JOIN seite AS b
          ON a.zuid=b.id
         LEFT JOIN seite AS c
          ON b.zuid=c.id
         ORDER BY COALESCE(c.id,b.id,a.id,0)*100 + COALESCE(b.id,a.id,0)*10+a.id;
        

        Aber das ist eher keine gute Idee.

        mfg
        Woodfighter

      2. Tach!

        Ich habe mir gedacht, das ich zuerst die erste Ebene abfrage! und dann irgendwie die Unterebenen, so das als Ergebniss so eine Ausgabe kommt.

        Egal ob du die Daten in einem Rutsch oder für jedes Elternelement die Kinder einzeln holst, die Datenbank gibt dir ein flaches Ergebnis. Die Baumstruktur musst du in jedem Fall am Client erzeugen. Es ist dann fast egal, ob du für die Kinder durch das eine große Ergebnisarray läufst oder ständig die Datenbank neu befragst. Letzteres kann aber langsamer sein.

        dedlfix.

        1. Tach,

          Es ist dann fast egal, ob du für die Kinder durch das eine große Ergebnisarray läufst oder ständig die Datenbank neu befragst. Letzteres kann aber langsamer sein.

          man kann die Anzahl Abfragen ja auf alle Fälle auf die Anzahl an Ebenen beschränken und mit nur einer Abfrage muss man im schlimmsten Fall (sobald frühere IDs auf später hinzugefügte IDs verweisen können) das Array mehrfach durchgehen.

          mfg
          Woodfighter