Statement NestedSets gesucht

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Statement NestedSets gesucht

    Hallo zusammen,

    ich baue gerade ein Statement für ein NestedSet, bei dem alle Elemente der zweiten Ebene ausgelesen werden sollen: id des Elements, und id des nächst höheren Elements in Ebene 1, also z.B.

    parentID, elementID
    1 : 3
    1 : 23
    1 : 4
    3 : 5
    3 : 6

    Aber irgendwie komme ich nicht drauf

    PHP Code:
    SELECT e.rgte.lfte.ide.typeCOUNT(*)-AS lev
    FROM elements 
    AS eelements AS p
    WHERE e
    .lft BETWEEN p.lft AND p.rgt AND e.pageID 24
    AND p.pageID 24 GROUP BY e.lft ORDER BY e.lft
    Das ist ja das Statement um den ganzen Baum auszulesen. Wenn ich noch p.id AS parentID mit auslese, ist das das gleich wie e.id. Wieso das?

    VIELEN DANK!

    strauberry

  • #2
    na ließ mal hier nach!

    http://www.klempert.de/nested_sets/artikel/

    Comment


    • #3
      Ja da stehen schon paar schöne Query-Beispiele... aber keins deckt das ab, was ich haben will. Einen Teilbaum auslesen ist nicht das Problem und die Ebene ermitteln auch nicht...

      Nochmal zur Erklärung:

      So sieht mein NS aus

      PHP Code:
      16 (1)
         
      (2)
            
      (3)
            
      (4)
         
      15 (5)
            
      10 (6)
            
      11 12 (7)
            
      13 14 (8
      In Klammern immer die ID des Elements

      Jetzt brauche ich alle Elemente der zweiten Ebene und dazu die ID des Elternelements, also sowas:

      parentID . elementID
      2 . 3
      2 . 4
      5 . 6
      5 . 7
      5 . 8

      Und die parentID wird bei dem Link doch nirgends ermittelt...

      Comment


      • #4
        PHP Code:
        SELECT IF(COUNT(*)-1p.ide.id) AS parentIDe.id AS elementIDe.type
        COUNT(*)-AS lev FROM elements AS eelements AS p WHERE p.type != 'pageroot' 
        AND e.lft BETWEEN p.lft AND p.rgt AND e.pageID 34 AND p.pageID 34 GROUP 
        BY e
        .lft ORDER BY e.lft
        edit: so der isses jetzt!
        Last edited by strauberry; 10-07-2007, 14:01.

        Comment


        • #5
          Der davor war immer noch falsch :-)

          PHP Code:
          SELECT p.id AS parentIDe.ide.type FROM elements AS eelements AS p WHERE 
          e
          .lft BETWEEN p.lft AND p.rgt AND e.pageID 37 AND p.pageID 37 AND
          p.type != 'pageroot' HAVING p.id != e.id ORDER BY e.lft
          Das GROUP BY muss draußen bleiben, weil sonst die interessanten Datensätze (p.id != e.id) rausgrgroupt werden. Statt dessen lässt man mit dem HAVING nochmal einen Filter über die Ergebnismenge laufen...
          Last edited by strauberry; 10-07-2007, 14:15.

          Comment

          Working...
          X