【发布时间】:2014-05-13 21:39:39
【问题描述】:
示例数据库(嵌套集模型中的类别):
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
`lft` int(11) NOT NULL,
`rgt` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
INSERT INTO category(name, lft, rgt) values("Primary", 0, 1000);
INSERT INTO category(name, lft, rgt) values("Secondary", 1, 500);
INSERT INTO category(name, lft, rgt) values("Tertiary", 2, 20);
INSERT INTO category(name, lft, rgt) values("Tertiary2", 21, 30);
我想像这样获取底部子类别的所有父母(可能是 concat?):
Primary > Secondary > Tertiary
Primary > Secondary > Tertiary2
除了玩 BETWEEN lft AND rgt 和 CONCAT 之外,我还很困惑,可以使用一些技巧和信息来获得所需的结果。谢谢!
【问题讨论】:
-
阅读 Bill Karwins 的幻灯片到SQL antipatterns,尤其是第 67 张幻灯片。
-
得承认我没有看到层次结构。鉴于 lft 和 rgt 值,我看不到您如何从中学到小学,也看不到如何从第三中学到中学。某种递归 cte 可能会起作用,但我认为 mysql 不支持这样的分层查询......
-
如果我不能从中得到所需的结果,当前的数据库结构对我来说毫无用处。如果您有需要更改数据库表的解决方案,我仍然非常希望看到它们。
标签: mysql sql hierarchical-data nested-sets nested-set-model