无限极分类的几种方法

1,使用父子pid方式进行递归排序。优势理解简单,相对直观。坏处就是数据量庞大时效率低下。php

无限极分类递归排序方案sql

public function order($array,$pid=1,$num = 0){
        $arr = array();
        foreach($array as $v){
            if($v['pid'] == $pid){
                $num == 0 ? $v['name'] : $v['name'] = '|'.str_repeat('→',$num).$v['name'];
                $arr[] = $v;
                $arr = array_merge($arr,$this->order($array,$v['id'],$num + 1));
            }
        }
        return $arr;
    }

2,path路径方式。没用过,但效率上跟递归应该没有太大区别。this

3,左右值方式。spa

表以下,每一个分类都加入对应左右值。code

Type_id排序

Name递归

Lftci

Rgtio

1table

商品

1

18

2

食品

2

11

3

肉类

3

6

4

猪肉

4

5

5

蔬菜类

7

10

6

白菜

8

9

7

电器

12

17

8

电视机

13

14

9

电冰箱

15

16

没有直接的父类标记或路径等。

          1商品18

     +---------------------------------------+

                2食品11                                    12电器17
          +-----------------+                     +---------------------+
    3肉类6          7蔬菜类10          13电视机14       15电冰箱16
    4猪肉5           8白菜9

对节点“食品”及其子孙节点进行先序遍历的列表,使用以下sql:

select * from tree where Lft between 2 and 11 order by Lft asc

 

Type_id

Name

Lft

Rgt

2

食品

2

11

3

肉类

3

6

4

猪肉

4

5

5

蔬菜类

7

10

6

白菜

8

9

子孙总数 =(右值-左值-1)/2 

以节点“食品”举例,其子孙总数=(11-2-1)/ 2 = 4

加减节点时对应加减后续节点的左右值。

此文章仅为了保存思路。细节可自行百度查询。

相关文章
相关标签/搜索