Php mysql查询以缩进子项并将所有子项分组
我有一个像这样的mysql表Php mysql查询以缩进子项并将所有子项分组,php,mysql,parent-child,hierarchical-data,adjacency-list,Php,Mysql,Parent Child,Hierarchical Data,Adjacency List,我有一个像这样的mysql表 id Category parent 2 Garments 12 3 Gents Garments 2 4 Sarees 2 5 Bridal Sarees 4 6 IT 12 7 IT Hardware 6 8 IT Software 6 9 Web Desig
id Category parent
2 Garments 12
3 Gents Garments 2
4 Sarees 2
5 Bridal Sarees 4
6 IT 12
7 IT Hardware 6
8 IT Software 6
9 Web Design 8
10 Web Based Solution 8
11 E-Commerce Solution 9
12 root NULL
使用mysql查询
SELECT t1.category AS lev1, t2.category as lev2, t3.category as lev3,
t4.category as lev4
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root';
我能得到这个结果
lev1 lev2 lev3 lev4
root Garments Gents Garments NULL
root Garments Sarees Bridal Sarees
root IT IT Hardware NULL
root IT IT Software Web Design
root IT IT Software Web Based Solution
现在我找不到一种方法来获取树状结构中单个列中的值。
范例
使用以下查询修改问题:
我已经部分实现了上述结果,但钢需要使用适当的分组
以下查询
SELECT distinct t1.category AS category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root'
union
SELECT distinct concat('--', t2.category) as category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root'
union
SELECT distinct concat('----', t3.category) as category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root'
union
SELECT distinct concat('------', t4.category) as category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root'
我得到的结果是根
--服装
--它
----男士服装
----纱丽
----IT硬件
----IT软件
------新娘礼服
------网页设计
------基于Web的解决方案
但是我想要的结果是
根
--服装
----男士服装
----纱丽
------新娘礼服
--它
----IT硬件
----IT软件
------网页设计
------基于Web的解决方案
如果您可以将表示层次结构的方式更改为可传递闭包表,那么您可以利用我过去给出的几个答案。主题是如何控制查询输出的排序,与上面描述的方法相同
SELECT distinct t1.category AS category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root'
union
SELECT distinct concat('--', t2.category) as category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root'
union
SELECT distinct concat('----', t3.category) as category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root'
union
SELECT distinct concat('------', t4.category) as category
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parent = t1.id
LEFT JOIN categories AS t3 ON t3.parent = t2.id
LEFT JOIN categories AS t4 ON t4.parent = t3.id
WHERE t1.category = 'root'