<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # **無限級分類設計** > 無限級分類是從頂級節點開始,每一個節點可以有多個子節點(寬),以及多層節點(高); ***** ### **解決方案** 1. 使用遞歸算法,也是使用頻率最多的,大部分開源程序也是這么處理,不過一般都只用到四級分類。這種算法的數據庫結構設計最為簡單。category表中一個字段id,一個字段fid(父id)。這樣可以根據WHERE id = fid來判斷上一級內容,運用遞歸至最頂層。 分析:通過這種數據庫設計出的無限級,可以說讀取的時候相當費勁,所以大部分的程序最多3-4級分類,這就足以滿足需求,從而一次性讀出所有的數據,再對得到數組或者對象進行遞歸。本身負荷還是沒太大問題。但是如果分類到更多級,那是不可取的辦法。 這樣看來這種分類有個好處,就是增刪改的時候輕松了…然而就二級分類而言,采用這種算法就應該算最優先了。 2. 相比于遞歸算法,第二種優勢非常大; 經典案例電腦文件夾設計 > 1. 頂級節點為電腦 > 2. 2級節點有 A、B、C、D、E、F、G盤等N個盤 > 3. 每一個盤都會有N多個文件夾,文件夾套文件夾;文件夾會有子節點存在,文件是當前節點的終止 ### **數據庫設計** ``` CREATE TABLE `eb_category` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `pid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '父級ID', `path` varchar(255) NOT NULL DEFAULT '/0/' COMMENT '路徑', `name` varchar(50) NOT NULL COMMENT '分類名稱', `type` smallint(2) DEFAULT '1' COMMENT '類型,A盤,2 B盤,3 C盤, 4 D盤, 5 E盤', `url` varchar(255) DEFAULT '' COMMENT '自定義跳轉地址', `extra` text COMMENT '擴展字段 Jsos格式', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '狀態, 1正常,0失效', `sort` int(5) NOT NULL DEFAULT '99999' COMMENT '排序', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY (`id`) USING BTREE, KEY `status+pid` (`pid`,`status`), ) ENGINE=InnoDB AUTO_INCREMENT=305 DEFAULT CHARSET=utf8 COMMENT='分類表'; ``` ```[sql] CREATE TABLE `category` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `pid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '父級ID', `path` varchar(255) NOT NULL DEFAULT '/0/' COMMENT '路徑', `name` varchar(50) NOT NULL COMMENT '分類名稱', `type` smallint(2) DEFAULT '1' COMMENT '類型,A盤,2 B盤,3 C盤, 4 D盤, 5 E盤', `url` varchar(255) DEFAULT '' COMMENT '自定義地址', `extra` text COMMENT '擴展字段 Jsos格式', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '狀態,1 正常,0 失效', `sort` int(5) NOT NULL DEFAULT '99999' COMMENT '排序', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY (`id`) USING BTREE, ) ENGINE=InnoDB AUTO_INCREMENT=305 DEFAULT CHARSET=utf8 COMMENT='分類表'; ``` * [ ] ### **需要思考的問題** > 1. 為什么需要path字段 > 2. path字段如何設計 > 3. 為什么要設計url字段 > 4. 如何快速正查詢,反查詢 > 4.1. 如何快速定位一個頂級節點下所有的子節點,形成樹形結構需要 > 4.2. 如何通過一個子節點快速查詢出父節點 > 5. 無限級分類的應用場景 > 6. 在項目中如何應用 ### **PHP代碼如何實現樹形結構** ``` <?php /**@formatCategory 無線級分類處理 * @param array $data 數據源 * @param string $fieldName 字段名 * @return array * @author 張先生 * @date 2020-03-27 */ if(!function_exists('formatCategory')){ function formatCategory(array $data , string $idName = "id", string $fieldName = 'pid', $childrenKey = 'child') { $items = []; foreach ($data as $item) { $items[$item[$idName]] = $item; } $result = array(); foreach($items as $item){ if(isset($items[$item[$fieldName]])){ $items[$item[$fieldName]][$childrenKey][] = &$items[$item[$idName]]; }else{ $result[] = &$items[$item[$idName]]; } } return $result; } } ``` [幾個常用的PHP方法](https://gitee.com/shmilyle/common_func/blob/master/common_func.php)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看