http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/に基づいて、左と右の値を使用するようにカテゴリ階層を変更しました。2 つのカテゴリが同じ名前の場合を除いて、これはうまく機能します。
CREATE TABLE `nested_category` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(80) DEFAULT NULL,
`lft` int(11) NOT NULL DEFAULT '0',
`rgt` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ;
INSERT INTO `nested_category` VALUES(2, 'Reviews', 3, 20);
INSERT INTO `nested_category` VALUES(6, 'Music2', 24, 25);
INSERT INTO `nested_category` VALUES(18, 'Culture', 2, 21);
INSERT INTO `nested_category` VALUES(19, 'Music', 18, 19);
その後:
SELECT node.name, (
COUNT( parent.name ) -1
) AS depth
FROM nested_category AS node, nested_category AS parent
WHERE node.lft
BETWEEN parent.lft
AND parent.rgt
GROUP BY node.name
ORDER BY node.lft
LIMIT 0 , 30
...与えます:
name depth
Culture 0
Reviews 1
Music 2
Music2 0
...これは完璧です。しかし、「music2」を「music」に変更すると、次のようになります。
name depth
Culture 0
Reviews 1
Music 3
ネストの深さを正しく保ちながら、同じ名前の複数のカテゴリを許可する方法についてのアイデアはありますか?