-- [PREPARED_DATA] SELECT n.id AS grpid, n.title AS grptitle, -- FLag, ob eine neue ID beginnt @flag := (@last_id <> n.id) AS flag, -- Counter pro ID setzen. Wird für die Sortierreihenfolge im GROUP_CONCAT() verwendet CASE WHEN @flag THEN @cnt := 1 ELSE @cnt := @cnt+1 END AS cnt, -- Parent ID ermitteln CAST(CASE WHEN @flag THEN @pid := n.id ELSE @pid := @npid END AS SIGNED) AS pid, -- Nächste Parent ID Ermitteln ( SELECT @npid := n2.parentid FROM nav n2 WHERE n2.id = @pid ) AS npid, @last_id := n.id AS nid FROM (SELECT @last_id := 0, @pid := 0, @npid := NULL, @cnt:=0) AS vars, (SELECT n3.id FROM nav n3) AS loop_rows, (SELECT n4.id, n4.title, n4.parentid FROM nav n4) AS n