MySQL的parent_ids_MySQL SELECT树的父ID

bd96500e110b49cbb3cd949968f18be7.png

How can I sort the records of a SELECT statement so that they represent a valid tree?

All of my attempts show sub-nodes nested under wrong parent nodes. What is the most reliable way to achieve this ordering?

Data

ID Parent ID Title

--------------------------------------------

0 NULL Root

1 0 Node A

2 0 Node B

3 1 Sub-Node C

4 1 Sub-Node D

5 3 Sub-Node E

Output

ID Parent ID Title

--------------------------------------------

0 NULL Root

1 0 Node A

3 1 Sub-Node C

5 3 Sub-Node E

4 1 Sub-Node D

2 0 Node B

Data Visualisation

Root

Node A

Sub-Node C

Sub-Node E

Sub-Node D

Node B

解决方案

Following the advice of @Blindy I have implemented this sort with PHP. Here are the two functions that seem to solve this issue relatively easily.

protected function _sort_helper(&$input, &$output, $parent_id) {

foreach ($input as $key => $item)

if ($item->parent_id == $parent_id) {

$output[] = $item;

unset($input[$key]);

// Sort nested!!

$this->_sort_helper(&$input, &$output, $item->id);

}

}

protected function sort_items_into_tree($items) {

$tree = array();

$this->_sort_helper(&$items, &$tree, null);

return $tree;

}

I would be interested to hear if there is a simpler approach, but this does seem to work.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值