我想吐出按父ID分组的数据库结果。
我有下表:
`pages`
`id` int
`parent_id` int
`title` varchar
部分pages
的{{1}}为0,表示他们没有父母。
假设我在parent_id
表中有以下行:
pages
鉴于这些行,我想在我的PHP页面上输出以下内容:
id | parent_id | title
1 | 0 | Colors
2 | 1 | Red
3 | 1 | Green
4 | 1 | Blue
5 | 0 | Devices
6 | 5 | Mobile
7 | 5 | Desktop
8 | 5 | Tablet
我知道我可以使用查询来获取Colors
Red
Green
Blue
Devices
Mobile
Desktop
Tablet
为0的行,然后使用另一个查询来获取parent_id
为parent_id
的行。
是否可以将其写为单个查询?
答案 0 :(得分:1)
是的,但它并不漂亮:你有一个分层数据结构(父/子),并且在一个查询中以这种方式排列事物需要递归查询,mysql不支持。
您需要为每个级别的层次结构进行自我加入:
SELECT parent.*, child.*
FROM yourtable AS parent
LEFT JOIN yourtable AS child ON parent.id = child.parent_id
对于树的每个级别,您都需要上面的其他连接/别名。
答案 1 :(得分:0)
我认为您正在寻找以下解决方案:
SELECT
t1.title as parent, t2.title
FROM
pages AS t1
LEFT JOIN pages AS t2
ON t1.id = t2.parent_id
WHERE
t2.id IS NOT NULL
您将得到如下结果:
parent title
Colors Red
Colors Green
Colors Blue
Devices Mobile
Devices Desktop
Devices Tablet
现在你必须在php方面安排它。
这是sqlfiddle链接:http://sqlfiddle.com/#!9/11fa6/3