Hilfe, bei der Erstellung eines Querys (Nested Sets)

Unicate

Erfahrenes Mitglied
Hallo, ich brauche hilfe, denn ich seh da gerade nicht mehr durch.

ich habe in meiner datenbank folgende gruppen angelegt:

administrators (id = 1, ns_lft = 1, ns_rgt = 8)
->leader (id = 2, ns_lft = 2, ns_rgt = 3)
->normal user (id = 3, ns_lft = 4, ns_rgt =7 )
-->test (id = 4, ns_lft = 5, ns_rgt=6 )

wenn ich mich nun als normal user anmelde, soll er mir nur testgruppe anzeigen
wenn ich mich als administrator anmelde, soll er mir alles zeigen
wenn ich mich als leader anmelde, soll er mir nix anzeigen, solange die gruppe leader keine neue gruppe erstellt hat

Bis jetzt hab ich das so gemacht, allerdings gibt er mir jetzt nur meine eigene Gruppe aus
(Logisch wegen den ersten zwei zeilen im WHERE-clause)
ich hab mal versucht die einfach wegzulassen, aber dann gibt er mir alle aus
Code:
SQL:
SELECT 
  node1.id, 
  node1.name, 
  COUNT(*) AS level 
FROM 
  puz_groups AS node1, 
  puz_groups AS node2 
WHERE 
  node1.id = ' ".$GroupIdOfMomentanUser." ' AND 
  node2.id = ' ".$GroupIdOfMomentanUser." ' AND
  node1.ns_lft BETWEEN node2.ns_lft AND 
  node2.ns_rgt GROUP BY node1.ns_lft
 
mkay Leutz ich hab ne Lösung gefunden:

PHP:
    $sql = "SELECT
              ns_lft,
              ns_rgt
            FROM
              ".PREFIX."groups
            WHERE
              id = '".$user->gid."' ";
    $result = mysql_query($sql) or die(mysql_error());
    $row = mysql_fetch_assoc($result);
    $rgt = $row["ns_rgt"];
    $lft = $row["ns_lft"];
   /*die rgt und lft holen. Alle untergruppen dieser gruppe haben nen lft oder nen rgt der zwischen dem der gruppe liegt, deshalb nun abfragen, dann funktionierts */
    $sql = 
    "SELECT 
       ".PREFIX."groups.id,
       ".PREFIX."groups.name,
       COUNT(".PREFIX."user.id) as member

     FROM 
       ".PREFIX."groups LEFT JOIN ".PREFIX."user
       ON ".PREFIX."groups.id = ".PREFIX."user.groupid
     WHERE 
        ns_lft > ".$lft." AND 
        ns_lft < ".$rgt."
      GROUP BY
        ".PREFIX."groups.id, ".PREFIX."groups.name";
 
Zurück