see4far: komplizierte DB-Abfrage

Hallo zusammen!
ich hab folgende relation in mySQL

id      parent_id
-----------------
10      8
8       6
6       7

das is natürlich jetzt stark vereinfacht, sollte aber für die beantwortung meiner frage reichen.

ist es möglich, mit einer sql-abfrage herauszubekommen, dass die id 10 (wenn man im baum denkt) der id 7 untergeordnet ist? wenn ja, wie?

besten dank.
see4far

  1. Moin!

    id      parent_id

    10      8
    8       6
    6       7

    ist es möglich, mit einer sql-abfrage herauszubekommen, dass die id 10 (wenn man im baum denkt) der id 7 untergeordnet ist? wenn ja, wie?

    es existiert keine id 7 oder meinst du die parent_id 7?

    tschüssi
    ichen

    1. id      parent_id

      10      8
      8       6
      6       7

      es existiert keine id 7 oder meinst du die parent_id 7?

      hätte ich vllt erwähnen sollen:
      die parent_ids gehören auch alle zu elementen dieser relation. also im prinzip könnte man das auch so darstellen:

      10 => 8 => 6 => 7

      verzweigungen sind möglich ..

      see4far

      1. Moin!

        10 => 8 => 6 => 7

        verstanden. du hast sicher eine hirachie unter deinen id's und p_id's. wie sieht die aus? aufsteigend oder absteigend? deine frage zu entnehmen aufsteigend (1 bis x (x >= 1) ). deiner darstellung entnehmend allerdings absteigend (x bis 1 (x >= 1) ).
        wie rum ist es nun?

        tschüssi
        ichen

        1. 10 => 8 => 6 => 7

          verstanden. du hast sicher eine hirachie unter deinen id's und p_id's. wie sieht die aus? aufsteigend oder absteigend? deine frage zu entnehmen aufsteigend (1 bis x (x >= 1) ). deiner darstellung entnehmend allerdings absteigend (x bis 1 (x >= 1) ).
          wie rum ist es nun?

          wenn man sich die hierarchie als baum denkt. ist in diesem fall 10 das letzte element einer verzweigung. die zahlen sagen jedoch nichts über die hierarchie aus. außerdem kann es zur 10 auch noch folgende hierarchie-verzweigung geben

          10 => 9 => 7

          oder sonstiges. da ist überhaupt nichts festgelegt. der baum sähe jetzt so aus

          7
          --9
          ----10
          --6
          ----8
          ------10

          oder sonst wie ...

          see4far

          1. Moin!

            id      parent_id

            10      8
            8       6
            6       7

            -----------------

            7
            --9
            ----10
            --6
            ----8
            ------10

            ich versteh die logik in deiner baumstruktur nicht so ganz.
            nach deiner tabelle so?

            7
            --6
            ---8
            ----10

            oder

            7
            --6
            8
            --6
            10
            --8

            oder baue du mal deinen baum nach deiner tabelle wie du ihn haben möchtest, vieleicht versteh ich dann diene struktur. ich würde dir gerne helfen und es auch verstehen wie deine struktur funktioniert, stehe gerade aber aufm schlauch.

            tschüssi
            ichen

            1. zu

              id      parent_id
              -----------------
              10      8
              8       6
              6       7
              -----------------

              wäre

              7
              --6
              ----8
              ------10

              der baum.

              7
              --9
              ----10
              --6
              ----8
              ------10

              ist der baum zu:

              id      parent_id
              -----------------
              10      8
              8       6
              6       7
              10      9
              9       7
              -----------------

              So verständlicher?

              see4far

  2. yo,

    ist es möglich, mit einer sql-abfrage herauszubekommen, dass die id 10 (wenn man im baum denkt) der id 7 untergeordnet ist? wenn ja, wie?

    wenn ich dich richtig verstanden habe, dann willst du von einer beliebigen person (in diesem falle id = 10) den höchsten vorgesetzten bekommen. zum einen fehlt dafür wie bereits angesprochen wurde in der beispieltabelle die id 7. dabei ist wichtig zu wissen, wie nun die id = 7 bei der spalte parent_id terminiert ist, sprich ob es sich dabei um ein NULL feld handelt oder anders gekennzeichnet ist, dass diese id keinen vorgestzten mehr hat.

    viel wichtiger ist es aber, dass es sich hierbei um rekursionen handelt. und diese sollte man nach möglichkeit vermeiden.

    dafür will ich dir gerne mal ein beispiel geben. wenn nun id = 10 als vorgesetzten id =5 hat und id = 5 hat als vorgesetzten id = 3 und id = 3 hat wiederum id = 10 als vorgesetzten, dann hast du ein ein kreisverkehr und somit ein problem. und bei referentieller integrität bedeutet dass, du kannst keinen dieser drei datensätze mehr löschen und musst auch tricksen, um sie in die tabelle reinzubekommen.

    mit anderen worten solltst du noch mal über dein datenbank-design nachdenken. dann könnte sich das problem mit deiner einen abfrage lösen.

    was die abfrage betrifft, so wird es schwer sein, diese abzubilden, vielleicht aber nicht unmöglich. aber dafür fehlt wie bereits gesagt die id = 7 und ihre terminierung.

    Ilja