Nested Sets: Kinder u. Enkel ab Vater X inkl. Level

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

  • Nested Sets: Kinder u. Enkel ab Vater X inkl. Level

    Hallo,

    ich habe ein Problem, das ich nicht wirklich nachvollziehen kann.

    Mit folgender Abfrage erhalte ich einen ganzen Baum inkl. des Levels:

    Code:
      SELECT
              m.id, m.bez,
              COUNT(*) AS level
            FROM
              menue m,
              menue tmp
            WHERE
              m.lft BETWEEN tmp.lft+1 AND tmp.rgt AND
              m.aktiv='1'
            GROUP BY
              m.lft
            ORDER BY
              m.lft
    (tmp.lft+1, da ich den obersten Vater an sich nicht benötige)

    Nun benötige ich im Prinzip dasselbe Ergebnis, jedoch erst ab einem bestimmten Vater. Angenommen ich möchte aus folgender Struktur
    Code:
    1
    |-1.1
    |-1.2
        |-1.2.1
        |-1.2.2
    |-1.3
    2
    |-2.1
    |-2.2
    alle Kinder des (Ur)Vaters 1. Also erweitere ich die Bedingung und sage, tmp.id muss 1 sein:
    Code:
    ...
            WHERE
              m.lft BETWEEN tmp.lft+1 AND tmp.rgt AND
              m.aktiv='1' AND
              [COLOR=red]tmp.id=1[/COLOR]
            GROUP BY
    ...
    In diesem Fall erhalte ich zwar als Resultat die richtigen Zeilen, jedoch stimmt die Level-Angabe nicht mehr. Nun hat nämlich auch 1.2.1 den Level 1, obwohl es Level 2 sein müsste.

    Ich komme nicht dahinter, woran das liegt. Er fragt ja immerhin trotzdem alle Zeilen ab und berücksichtigt sie, sofern die Zeilen aus der ersten Tabelle (m) der zweiten (tmp) bei dessen id=1 zugeordnet werden können. Warum ist also das Zählergebnis von COUNT inkorrekt?

    Schöne Grüße,

    pb

  • #2
    überleg dir mal, was bei dem count gezählt wird, dann kommst du schon drauf.

    oder schau dir das ergebnis mal ohne 'group by' an.
    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
      Ohne Gruppierung kann ich ja kein COUNT anwenden, wenn ich über mehrere Tabellen hinweg abfrage.

      COUNT zählt hier wohl, wie viele Zeilen "tmp.id" = 1 haben. Zumindest, wenn ich mir das jetzt so überlege.

      In diesem Fall erscheint mir das aber recht aussichtslos (für meinen Kenntnisstand). Lässt sich das überhaupt in einer Abfrage realisieren, oder muss PHP ran?

      Kommentar


      • #4
        count(*) zählt, wieviele Vorfahren von m du selektierst; also wieviele Zeilen des ursprünglichen Ergebnisses du durch das group by jeweils zu einer zusammenfasst.

        und durch tmp.id=1 ist das nunmal genau eine.
        oder schau dir das ergebnis mal ohne 'group by' an.
        ... und ohne group by-Klausel. ... und ohne tmp.id=1
        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

        Lädt...
        X