首頁  >  文章  >  資料庫  >  mysql中無限極分類的程式碼實現

mysql中無限極分類的程式碼實現

不言
不言原創
2018-08-20 16:34:002700瀏覽

這篇文章帶給大家的內容是關於mysql中無限極分類的程式碼實現,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

我也是從別的地方找來的,分析後發現還挺不錯的,特來分享。

無法簡單處理:

id ​​                     name                                   新聞                     0 對                     中國新聞             1                # 

3                        美國新聞             1                     北京新聞             2                       指甲哥新聞         3                          0-1-3

#「敘述中:

SELECT id,name,pid,path,concat(path,'-',id) AS newpath FROM cates ORDER BY newpath

查詢後的結果:

id                      name                    pid           newpath

1                         新聞              0                        0-1

2                                  0-1                     0-1-2##         2                           0-1- 2                  0-1-2-4

3                                0-1                      0-1-3

5                              0-1-3                   0-1-3-5

可以看出,結構已經很清晰了。非常巧妙的運用了mysql的排序功能,用concat() 函數把當前路徑與當前的id的連接起來(很想連接字串),起個別名newpath ,在排序newpath,巧的是排序時先比較0 ,在比較1,在比較2,在比較3…,這樣查詢的結果是直接按曾級排序好的,接下來只需要在前台循環輸出就可以了,「層級關係佔位符」也好解決, newpath 的0-1-2-4 這個就相當於無限極佔位符,php輸出時要用上面的語句查詢出來,在後台處理每一個資料的newpath 欄位值,先把值分割成數組,在統計這個數組,再在數組裡加一個鍵count(一組資料),把統計的數組個數放到這個鍵裡。

 thinkphp 5.0 為例:

$list = CateModel::fild(‘id,name,pid,path,concat(path,’-‘,id)’)->order(‘newpath asc’)->select();
// 上面模型查询方法只是大概意思,可以根据最上面的 mysql 语句,用 tp5 的方式拼出来。
foreach ($list as $k=>v){
$list[$k][‘count’] = count(explode(‘-‘,$v))
}

這個count就是層級分類的佔位符,然後在模版裡循環它,循環幾次就echo 幾次 

<select name=”aa”>
{volist name=”list” id=”vo”}
<option vlaue=”{$vo.id}”>
{php}
for($i=0;$i<$vo[‘count’]*2;$i++){
echo ‘ ’
}
{/php}
{$vo.name}
</option>
{/volist}
</select>

效果:

新聞

        中國新聞

                北京新聞

         美國新聞學

            # 相關順序中實現華盛頓新聞#n# 

#TP5框架下如何用遞迴實現無限分級(程式碼範例)

#

以上是mysql中無限極分類的程式碼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn