Mysql 允许使用嵌套集结构使用相同名称的多个类别

Mysql 允许使用嵌套集结构使用相同名称的多个类别,mysql,nested-sets,Mysql,Nested Sets,基于,我已将类别层次结构更改为使用左值和右值。这非常有效,除非两个类别的名称相同 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 K

基于,我已将类别层次结构更改为使用左值和右值。这非常有效,除非两个类别的名称相同

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”,我会得到:


关于如何保持嵌套深度正确,但允许使用相同名称的多个类别,您有什么想法吗?

将id添加到结果中并
分组,以保留所选内容的唯一性

SELECT node.name, id, (
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, id
ORDER BY node.lft
LIMIT 0 , 30

你不能把id添加到结果中,然后分组吗?哈哈,就是这样的时刻。如果它解决了你的问题,我已经把它作为一个答案发布了。
SELECT node.name, id, (
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, id
ORDER BY node.lft
LIMIT 0 , 30