[MySQL 4.1] Alle Parents auslesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 4.1] Alle Parents auslesen

    Hi mal wieder,

    hab ein kleines Problem.

    Ich habe für eine Baumstruktur eine Tabelle mit Foldern.

    Code:
    folder_id   parent_id   name
    1           0           ein Ordner
    2           0           noch ein Ordner
    12          2           ein unterordner
    13          2           noch ein unterordner
    14          12          ein unterunterordner
    15          14          ein unterunterunterordner
    Dadurch kann ich beliebige Tiefen in diesen Ordner abbilden. Wenn ein Ordner die Parent_id 0 hat, ist er der oberste Ordner.

    Nun habe ich ein Problem. Ich mochte ausgehend von folder_id 15 alle parent_id's haben.
    Also: 15,14,12,2

    Mein Idee war es einfach ein und die selbe Tabelle zu joinen und immer wieder where parent_id zu machen. Allerdings ist ja dann die Tiefe der Ordner durch meine Anzahl der Joins begrenzt. Nun ich denke das macht nicht wirklich Sinn.

    Hat jemand vielleicht mal nen Denkanstoß für mich? Danke.


    EDIT:

    Ich weiß, ich könnte eine Rekursive Funktion in PHP schreiben. Ich würde es aber gerne mit einer Query lösen.


  • #2
    Informier dich mal über "nested sets"
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Hi,

      nested sets kenn ich - nur die Struktur der DB kann ich nicht ändern, weil sie zu tief in unserem System verankert ist.
      Zum Glück hat mein Vorgänger ein Feld vorgesehen, wo genau diese Informationen drin stehen - damit hat sich das Problem zum Glück erledigt.

      Danke trotzdem.

      Kommentar


      • #4
        Im übrigen möchte ich das Statement für nested Sets mal sehen mit Dem Du das Ergebnis bekommst ... !

        Ohne PRIOR CONNECT (Oracle) wird das wohl nichts mit einem Statement ... !
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          Original geschrieben von goth
          Im übrigen möchte ich das Statement für nested Sets mal sehen mit Dem Du das Ergebnis bekommst ... !
          dann schau hin:
          $pfad = select p.ID from Tabelle p, Tabelle x where x.ID=$id and x.LFT between p.LFT and r.LFT (and p.ID<>$id) order by LFT

          wenn man die Daten vom Datensatz X ohnehin alle braucht, tun´s zwei Queries noch besser:
          $x = select * from tabelle where ID=$id
          $pfad = select ID from tabelle where $x[LFT] between LFT and RGT (and ID<>$id) order by LFT


          @prego: Es gäbe noch die Möglichkeit, beide Verknüpfungen in einer Tabelle vorzuhalten ... mit der Pflege wird´s dann etwas unbequemer - die schnellste Variante wär aufwendig zu programmieren; zur Not kann man aber nach jeder Struktur-Änderung aber aus der Parent/Pos-Struktur jederzeit das nested set generieren ... ist nicht sauber; aber Hauptsache wäre wohl: schnell genug.
          Die IDs der Ahnen als varchar zu speichern, ist aber auch ne Methode; nur noch etwas unsauberer (und im select langsamer).

          OT@goth: Hast du was gegen nested sets? oder wolltest du nur mal wieder deinem "Ich mag nicht schlumpfen!" Ausdruck verleihen?
          mein Sport: mein Frühstück: meine Arbeit:

          Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

          Kommentar


          • #6

            Punkt für Dich ... und ...

            Ja ... ich habe definitiv was gegen Nested Set's ... die sind bestenfalls ganz nett wenn's darum geht schnell Strukturen abzufragen ... aber wenn's darum geht wirklich ersthaft damit zu arbeiten ... (Einfügen, Löschen, Verschieben) ... wird's ein tierisches Gefummel .. !
            Zuletzt geändert von goth; 28.08.2005, 22:59.
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Kommentar

            Lädt...
            X