mysql中無限極分類的代碼實現

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

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

無法發圖只能簡單處理:

id ? ? ? ? ? ? ? ? ? ? ?name ? ? ? ? ? ? ? ? ? ?pid ? ? ? ? ? ? ? ? ? ?path

1 ? ? ? ? ? ? ? ? ? ? ? ?新聞 ? ? ? ? ? ? ? ? ? ? ?0 ? ? ? ? ? ? ? ? ? ? ? ? ?0

2 ? ? ? ? ? ? ? ? ? ? ? ?中國新聞 ? ? ? ? ? ? ?1 ? ? ? ? ? ? ? ? ? ? ? ? ?0-1

3 ? ? ? ? ? ? ? ? ? ? ? ?美國新聞 ? ? ? ? ? ? ?1 ? ? ? ? ? ? ? ? ? ? ? ? ?0-1

4 ? ? ? ? ? ? ? ? ? ? ? ?北京新聞 ? ? ? ? ? ? ?2 ? ? ? ? ? ? ? ? ? ? ? ? 0-1-2

5 ? ? ? ? ? ? ? ? ? ? ? ?指甲哥新聞 ? ? ? ? ?3 ? ? ? ? ? ? ? ? ? ? ? ? ?0-1-3

一條語句搞定:

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

查詢后的結果:

id ? ? ? ? ? ? ? ? ? ? ?name ? ? ? ? ? ? ? ? ? ?pid ? ? ? ? ? ? ? ? ? ? ? ? ?path ? ? ? ? ? ? ? ? ?newpath

1 ? ? ? ? ? ? ? ? ? ? ? ? 新聞 ? ? ? ? ? ? ? ? ? ? ? 0 ? ? ? ? ? ? ? ? ? ? ? ? ? 0 ? ? ? ? ? ? ? ? ? ? ? ?0-1

2 ? ? ? ? ? ? ? ? ? ? ? ? 中國新聞 ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? 0-1 ? ? ? ? ? ? ? ? ? ? 0-1-2

4 ? ? ? ? ? ? ? ? ? ? ? ? 北京新聞 ? ? ? ? ? ? ? 2 ? ? ? ? ? ? ? ? ? ? ? ? ? 0-1-2 ? ? ? ? ? ? ? ? ?0-1-2-4

3 ? ? ? ? ? ? ? ? ? ? ? ? 美國新聞 ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ? ? ? ? ? ? ? 0-1 ? ? ? ? ? ? ? ? ? ? ?0-1-3

5 ? ? ? ? ? ? ? ? ? ? ? ? 指甲哥新聞 ? ? ? ? ?3 ? ? ? ? ? ? ? ? ? ? ? ? ? ?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> {volist?name=”list”?id=”vo”} <option> {php} for($i=0;$i {/volist} </option></select>

效果:

新聞

? ? ? ? 中國新聞

? ? ? ? ? ? ? ? 北京新聞

? ? ? ? ?美國新聞

? ? ? ? ? ? ? ? ?華盛頓新聞

相關推薦:

thinkphp中無限級欄目的排序實現代碼

thinkphp中無限級欄目的排序實現代碼

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享