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

來源:互聯網
上載者:User
本篇文章給大家帶來的內容是關於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 name=”aa”>{volist name=”list” id=”vo”}<option vlaue=”{$vo.id}”>{php}for($i=0;$i<$vo[‘count’]*2;$i++){echo ‘&nbsp;’}{/php}{$vo.name}</option>{/volist}</select>

效果:

新聞

中國新聞

北京新聞

美國新聞

華盛頓新聞

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.