無限極分類的幾種方法

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

加減節點時對應加減後續節點的左右值。

此文章僅爲了保存思路。細節可自行百度查詢。

相關文章
相關標籤/搜索