Gabi (die verzeifelte): [MySQL]: Nested-Set - Select-Abfrage-Problem

Hallo,

ich habe das gleiche Problem wie in dem Thread von "Dr. Acula" hier in dem Forum, habe auch die weiterführenden Links besucht und wie eine Besessene gegooglet aber ich verstehe es einfach nicht!

Wie müssten dann die beiden select - Abfragen aussehen ?#
Meine dd-struktur ist neben anderen Feldern aufgebaut mit id, lft,rgt und parentid.

Ich hoffe und bitte um eure Hilfe!

Viele Grüße
Gabi

  1. Am einfachsten gibst du jeder Zeile in der Tabelle eine laufende Nummer (zur Ordnung=rang) und eine Nummer für die Einrückung (=indent). Dazu noch eine ID für jede Zeile und jede eingerückte Zeile enthält in einem weiteren Feld die ID der übergeordneten Zeile (pID), Bsp:

    ID  rang  pID  indent titel
    1   1     0    0      Home
    2   2     1    1      Unterpunkt von Home
    4   3     1    1      Weiterer Unterpunkt von Home
    10  4     0    0      Produkte
    ....

    Jetzt einfach einen SELECT mit ORDER BY rand ASC. Den Wert von indent musst in PHP noch in eine passende List oder ähnliches umwandeln. Möchtest du z.B. alle Unterpunkt von Home ginge das z.B. so: SELECT titel FROM tab WHERE pID=1 ORDER BY rang ASC.

    Ich hoffe das hilft dir.

    1. Hallo Tom123,

      leider ist diese Lösung nicht wirklich für mich umsetzbar, dennoch vielen Dank für deine Antwort.
      Ich habe ja bereits das komplette db-Set als nested-sets-modell erstellt und alle anderen Abfragen wie z.B. neue Einträge, Strukturen verschieben usw. bereits fertig.
      Zumal ich, um ganz ehrlich zu sein, nicht so ganz deinen Lösungsansatz verstehe. Grundsätzlich bin ich der Erklärung von Arne Klempert gefolgt, habe allerdings hierbei schon die Struktur um die parentid erweitert.

      Gruss
      Gabi

      1. Zugegeben, meine Erklärung ist kurz vielleicht zu kurz gewesen. Kannst ja mal deine Tabellenstruktur angeben und was genau du auslesen willst. Vielleicht kann ich dir ja dann den Query sagen.

        1. Hallo nochmal,

          wie gewünscht mein DB-Aufbau:

          DB-Aufbau (Auszug):

          id    pid    lft    rgt    katname
          ----- ------ ------ ------ ---------------------
          1     0      1      24     Katalog
          2     1      2      11     Oberkategorie 01
          3     1      12     12     Oberkategorie 02
          4     1      14     19     Oberkategorie 03
          5     1      20     21     Oberkategorie 04
          6     1      22     23     Oberkategorie 05
          7     2      3      4      Kategorie 01 a
          8     2      5      6      Kategorie 01 b
          9     4      15     16     Kategorie 03 a

          Baumstruktur komplett:

          Katalog

          • Oberkategorie 01
              - Kategorie 01a
              - Kategorie 01b
          • Oberkategorie 02
          • Oberkategorie 03
              - Kategorie 03a
          • Oberkategorie 04
          • Oberkategorie 05

          Gewünscht ist aber die Anzeige wie in dem genanntem Thread von Dr. Acula.

          Viele Grüße
          Gabi

  2. echo $begrüßung;

    ich habe das gleiche Problem wie in dem Thread von "Dr. Acula" hier in dem Forum,

    Du möchtest also einen kompletten Pfad zu einem Blatt herausfinden, was du mit Arne Klemperts Blick auf Teilbäume hinbekommen solltest. Außerdem brauchst du noch alle Äste einer Ebene.

    Wie müssten dann die beiden select - Abfragen aussehen ?#
    Meine dd-struktur ist neben anderen Feldern aufgebaut mit id, lft,rgt und parentid.

    Den Weg zur Wurzel hast du ja schon bei der Blatt-Abfrage bekommen. Du brauchst "nur noch" alle mit der gleichen Parent-ID wie der Parent vom Blatt. Mir fällt dazu grad nur ein, die Parent-ID vom Parent mit Subselects zu ermitteln.

    echo "$verabschiedung $name";