Statement NestedSets gesucht

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

  • 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/

    Kommentar


    • #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...

      Kommentar


      • #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!
        Zuletzt geändert von strauberry; 10.07.2007, 15:01.

        Kommentar


        • #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...
          Zuletzt geändert von strauberry; 10.07.2007, 15:15.

          Kommentar

          Lädt...
          X