Hallo Ole,
Das erstellen der Tabelle war kein Problem und mit diesem Code habe ich mein Rootposting erzeugt:
LOCK TABLES kategorien WRITE;
INSERT INTO kategorien ( kat_name,kat_titel,kat_link,kat_position,kat_not_kat,kat_frei, lft, rgt )
VALUES ( 'Start','Start','index.cfm','','0','1',1,2 );
d.h. statt payload hast Du die Spalten
kat\_name,
kat\_titel,
kat\_link,
kat\_position,
kat\_not\_kat,
kat\_frei
~~~sql
>
> UPDATE kategorien
> SET root_id = LAST_INSERT_ID()
> WHERE node_id = LAST_INSERT_ID();
>
> UNLOCK TABLES;
>
Soweit, sogut. Was ich allerdings nicht verstehe, ist die Syntax der Query zum Abrufen der Tabelle:
hier entsprechend einsetzen. Bitte beachte, dass im Tutorial bereits Anworten drin sind, d.h. bei Dir Unterkategorien.
SELECT node1.payload,
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;
MySQL ist schlampig im Umgang mit GROUP BY. Alle anderen DBMS verlangen, dass nach node1.payload gruppiert wird, auch wenn es hier an der Ausgabe nichts ändert. (Für mich ein Bug, kein Feature)
> Meine Tabelle heißt, anders als im Tutorial, nicht "node" sondern "kategorien". Also muß ich hier eben "node" durch "kategorien" ersetzen.
> Aber: Wie kann "node1.payload" selektiert werden, wenn node1 garnicht definiert ist? Oder wird erst "node AS node1" abgearbeitet, so daß node1 an dieser Stelle doch schon definiert ist?
node1 ist ein Aliasname für die Tabelle node. node2 ebenfalls. Du greifst zweimal auf die gleiche Tabelle zurück, siehe auch meine Erklärung [ beim Selfjoin](http://aktuell.de.selfhtml.org/artikel/review/datenbanken/fortgeschrittene-joins/selfjoin.htm).
Freundliche Grüße
Vinzenz