Hallo!
Erst mal will ich mich für diese Tut bedanken, mir erschein dieses Thema als sehr sinnvoll!
Allerdings befinde ich mich noch sehr am Anfang und bin noch lange nicht durchgestiegen...
Mir sind jedoch ein paar Fehler aufgefallen, die folgenden Codebeispiele funktionieren bei mir nicht:
Code:
SELECT node1.payload,
floor((node1.rgt – node1.lft) / 2) AS children
COUNT(*) AS level
FROM node AS node1,
node AS node2
WHERE node1.root_id = 1
AND node2.root_id = 1
AND node1.lft BETWEEN node2.lft AND node2.rgt
GROUP BY node1.lft;
Code:
SELECT @node_id := root_id, @lft := lft
FROM node
WHERE node_id = NODE_ID;
UPDATE node
SET lft = lft + 2
WHERE root_id = @node_id AND lft > @lft;
UPDATE node
SET rgt = rgt + 2
WHERE root_id = @root_id AND rgt > @lft";
INSERT INTO node (root_id, payload, lft, rgt)
VALUES (@root_id, 'my left little brother' @lft, @lft + 1);
Beim zweiten Code-Posting stimmen, glaube ich, die Anführungzeichen in der dritt letzten Zeile nicht und es fehlt ein Komma in der letzten Zeile vor '@lft'... Aber dann memmt er immer noch rum weil root_id nie null sein darf..
Naja, ich guck mal weider 
/edit:
Außerdem verstehen ich nicht warum, beispielsweise bei folgendem Codebeispiel (welchse problemlos funktioniert!), node immer noch zusätlich als node1 bzw. node2 geschrieben wird:
Code:
SELECT node1.payload, node1.node_id,
COUNT(*) AS level
FROM node AS node1,
node AS node2
WHERE node1.root_id = 1
AND node2.root_id = 1
AND node1.lft BETWEEN node2.lft AND node2.rgt
GROUP BY node1.lft
Dieses Beispiel ist doch gleichbedeutend mit:
Code:
SELECT node.payload, node.node_id, COUNT( * ) AS
LEVEL
FROM node
WHERE node.root_id =1
AND node.root_id =1
AND node.lft
BETWEEN node.lft
AND node.rgt
GROUP BY node.lft
LIMIT 0 , 30
Wie gesagt, so maches geht mir noch nicht so rein...
regards,
fred