這篇文章帶給大家的內容是關於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 newpath1 新聞 0 0-12 0-1 0-1-2## 2 0-1- 2 0-1-2-43 0-1 0-1-35 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中文網其他相關文章!