显示创建表:
CREATE TABLE `a` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`parent_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `parent_id` (`parent_id`),
CONSTRAINT `a_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `a` (`id`) ON DELETE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1
选择:
+----+---------+-----------+
| id | name | parent_id |
+----+---------+-----------+
| 1 | World | 1 |
| 2 | Europe | 1 |
| 3 | USA | 1 |
| 4 | France | 2 |
| 5 | Germany | 2 |
+----+---------+-----------+
问题:
我如何最好地定义一个函数,将 id 4 作为参数传递,返回:
“世界 > 欧洲 > 法国”
“parent_id”的这种分层“嵌套”可以任意深,而不仅仅是 3 层深。
没有测试,只是在我的头顶。供参考http://dev.mysql.com/doc/refman/5.5/en/create-procedure.html
您可以使用以下函数返回 N no:of 叶节点的层次结构,例如“世界 > 欧洲 > 法国 > S1 > S2”
试用
现在,受到我试图遵循的帕南德拉教义的启发,我写了对他正确答案的改写,在我看来有点“容易理解”。留给后人。现在的问题是:根据评论编写这样的函数真的是个坏主意吗?如果是这样,为什么?