CREATE TABLE `CategoryTree` (
`CategoryID` int(11) NOT NULL AUTO_INCREMENT,
`CategoryName` varchar(128) CHARACTER SET utf8 NOT NULL,
`CategoryLeft` int(11) NOT NULL,
`CategoryRight` int(11) NOT NULL,
PRIMARY KEY (`CategoryID`)
) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=latin1;
以上のようなカテゴリーがあれば、入っているデータはこうなります。
SELECT CategoryName, CategoryLeft,CategoryRight
FROM CategoryTree
ORDER BY CategoryLeft
木構造のデータが綺麗に出力できるように、深さを表すこういうクエリを書いておいて実行してみましょう。
SELECT node.CategoryName, (COUNT(parent.CategoryName) - 1) AS depth
FROM CategoryTree AS node,
CategoryTree AS parent
WHERE node.CategoryLeft BETWEEN parent.CategoryLeft AND parent.CategoryRight
GROUP BY node.CategoryName, node.CategoryLeft
ORDER BY node.CategoryLeft;