MySQL-MySQL在使用左右值分类时,如何查询最大的深度?

WordPress 开发 WordPress 开发 主题:1098 回复:2322

MySQL-MySQL在使用左右值分类时,如何查询最大的深度?

晚风撩人 发布于 2017-07-27 字数 446 浏览 1017 回复 1

MySQL在使用左右值分类时,如何查询最大的深度是多少?

CREATE TABLE `types` (
`id` smallint(5) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` char(100) NOT NULL DEFAULT '' COMMENT '名称',
`lft` int(10) NOT NULL DEFAULT '0' COMMENT '左值',
`rgt` int(10) NOT NULL DEFAULT '0' COMMENT '右值',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(1

甜柠檬 2017-09-16 1 楼

试了一下,用下面的语句能查出最大的深度,及其所在的行

SELECT a.*,count(1) as level FROM types a left join types b on b.lft<=a.lft and b.rgt>=a.rgt group by a.id order by level desc limit 1

你的表如果加一个level的字段,在插入数据时就把对应的深度记下了,那更方便

我的实验数据是这样的:

 INSERT INTO types (id, name, lft, rgt) VALUES
(1, '食物', 1, 18),
(2, '水果', 2, 11),
(3, '红色', 3, 6),
(4, '樱桃', 4, 5),
(5, '黄色', 7, 10),
(6, '香蕉', 8, 9),
(7, '肉类', 12, 17),
(8, '牛肉', 13, 14),
(9, '猪肉', 15, 16);