也许最简单的方法来管理MySQL数据库中的分层数据是adjacency list model。这是,给每个节点父:在MySQL表中获取树路径
CREATE TABLE category(
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
parent INT DEFAULT NULL);
这是很容易获得的父节点,或者即使有一个最大树深度,您可以使用此得到整个树:
SELECT CONCAT_WS('/', `t3`.`name`, `t2`.`name`, `t1`.`name`) AS `path`
FROM category AS t1
LEFT JOIN category AS t2 ON t2.parent = t1.category_id
LEFT JOIN category AS t3 ON t3.parent = t2.category_id
LEFT JOIN category AS t4 ON t4.parent = t3.category_id
WHERE t1.name = 'xxxxx';
这在很多情况下已经足够了,但是如何将这个解决方案概括为比3个节点更深的树?即您可能会有类似“电子/音频/发射器/ FM /摩托罗拉”的路径。
只有一个查询可能吗?
Mhh ..只有一个查询不能完成任务,但它完成了这项工作。为了避免出现问题,是否应该锁定表格“员工”? – Ivan 2011-02-28 15:19:20
只需一个电话 - 致电employees_hier(1),我会推荐innodb而不是myisam。 – 2011-02-28 18:43:04
这是阿里·拉特...伟大的选择,顺便说一句:-) – 2011-03-18 16:25:15