我有一个新想法,我认为它会很好。
这个想法是这样的:
在 category_parent 列中,我们将插入对该节点所有父节点的引用。
+----+----------------------+------------------+
|编号 |类别名称 |层次结构 |
+----+----------------------+------------------+
| 1 |猫1 | 1 |
+----+----------------------+------------------+
| 2 |猫2 | 2 |
+----+----------------------+------------------+
| 3 |三类 | 3 |
+----+----------------------+------------------+
| 4 |子目录1_1 | 1-4 |
+----+----------------------+------------------+
| 5 |子目录1_2 | 1-5 |
+----+----------------------+------------------+
| 6 | subsubcat1_1 | 1-4-6 |
+----+----------------------+------------------+
| 7 | subsubcat1_2 | 1-4-7 |
+----+----------------------+------------------+
| 8 | subsubcat1_3 | 1-4-8 |
+----+----------------------+------------------+
| 9 |子目录1_3_1 | 1-4-8-9 |
+----+----------------------+------------------+
| 10 | subsubcat1_3_2 | 1-4-8-10 |
+----+----------------------+------------------+
| 11 |子分类1_3_1_1 | 1-4-8-9-11 |
+----+----------------------+------------------+
| 12 |子subsubcat1_3_1_1 | 1-4-8-9-12 |
+----+----------------------+------------------+
| 13 |子subsubcat1_3_1_2 | 1-4-8-9-11-13 |
+----+----------------------+------------------+
| 14 | subsubsubcat1_2_1_3 | 1-4-8-9-11-14 |
+----+----------------------+------------------+
如果您查看我更新的表格,您会注意到每条记录都有一个到其父级的链接,不仅是直接的,还包括所有的父级。
对于那项工作,我做了一些修改以插入:
Insert into table_name (category_name, hierarchy) values ('new_name', (concat(parent_hierarch, '-', (SELECT Auto_increment FROM information_schema.tables WHERE table_name='table_name'))))
现在让我们进行您想要的查询:
1- 汽车的所有子类别:
select * from table_name where hierarchy like '1-%'
2- 如果您需要 BLACK 的所有父级,只需键入:
select * from table_name where hierarchy = '1-4-8-9' or hierarchy = '1-4-8' or hierarchy = '1-4' or hierarchy = '1'
(您可以从 php 构建该查询,在 '-' char 处拆分层次结构字段)
3- 要查看所有类别,包括级别和直接父级:
select *, SUBSTR(hierarchy, 1, (LENGTH(hierarchy) - LENGTH(id) - 1)) as parent, LENGTH(hierarchy) - LENGTH(REPLACE(hierarchy, '-', '')) as level From table_name
+----+----------------------------------+-----------------+--- --------+--------+
|编号 |类别名称 |层次结构 |家长 |水平 |
+----+----------------------------------+-----------------+--- --------+--------+
| 1 |猫1 | 1 | | 0 |
+----+----------------------------------+-----------------+--- --------+--------+
| 2 |猫2 | 2 | | 0 |
+----+----------------------------------+-----------------+--- --------+--------+
| 3 |三类 | 3 | | 0 |
+----+----------------------------------+-----------------+--- --------+--------+
| 4 |子目录1_1 | 1-4 | 1 | 1 |
+----+----------------------------------+-----------------+--- --------+--------+
| 5 |子目录1_2 | 1-5 | 1 | 1 |
+----+----------------------------------+-----------------+--- --------+--------+
| 6 | subsubcat1_1 | 1-4-6 | 1-4 | 2 |
+----+----------------------------------+-----------------+--- --------+--------+
| 7 | subsubcat1_2 | 1-4-7 | 1-4 | 2 |
+----+----------------------------------+-----------------+--- --------+--------+
| 8 | subsubcat1_3 | 1-4-8 | 1-4 | 2 |
+----+----------------------------------+-----------------+--- --------+--------+
| 9 |子目录1_3_1 | 1-4-8-9 | 1-4-8 | 3 |
+----+----------------------------------+-----------------+--- --------+--------+
| 10 | subsubcat1_3_2 | 1-4-8-10 | 1-4-8 | 3 |
+----+----------------------------------+-----------------+--- --------+--------+
| 11 |子分类1_3_1_1 | 1-4-8-9-11 | 1-4-8-9 | 4 |
+----+----------------------------------+-----------------+--- --------+--------+
| 12 |子subsubcat1_3_1_1 | 1-4-8-9-12 | 1-4-8-9 | 4 |
+----+----------------------------------+-----------------+--- --------+--------+
| 13 |子subsubcat1_3_1_2 | 1-4-8-9-11-13 |1-4-8-9-11 | 5 |
+----+----------------------------------+-----------------+--- --------+--------+
| 14 | subsubsubcat1_2_1_3 | 1-4-8-9-11-14 |1-4-8-9-11 | 5 |
+----+----------------------------------+-----------------+--- --------+--------+
这是一个新想法,需要改进。