成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

無(wú)限級(jí)分類(或菜單)的高性能實(shí)現(xiàn)思路

aristark / 602人閱讀

摘要:一般說(shuō)到無(wú)限級(jí)分類菜單之類的東西,大家我的數(shù)據(jù)表設(shè)計(jì)一般是這樣的更多字段衣物上衣褲子西褲長(zhǎng)西褲短西褲襯衫其中,表示父分類的。

一般說(shuō)到無(wú)限級(jí)分類、菜單之類的東西,大家 (我) 的數(shù)據(jù)表設(shè)計(jì)一般是這樣的

id parent_id title 更多字段...
1 0 衣物 ...
2 1 上衣 ...
3 1 褲子 ...
4 3 西褲 ...
5 4 長(zhǎng)西褲 ...
6 4 短西褲 ...
7 2 襯衫 ...

其中,parent_id表示父分類的id。由此可知,衣物分類下有上衣褲子兩個(gè)二級(jí)分類;而褲子還有西褲這個(gè)三級(jí)分類……以此類推

這種設(shè)計(jì)比較常見(jiàn) (就我所知),但缺點(diǎn)很明顯。
例如需要顯示例如下面這樣的面包屑導(dǎo)航時(shí):
衣物 > 褲子 > 西褲
就不得不進(jìn)行多次循環(huán)

再例如,需要顯示所有分類并表示層級(jí)時(shí):

也不得不進(jìn)行多次循環(huán)

那么,如何快速實(shí)現(xiàn)上述的常見(jiàn)功能呢?

實(shí)現(xiàn)

首先,示例表設(shè)計(jì):

id title path level 更多字段...
1 衣物 0 0 ...
2 上衣 0,1 1 ...
3 褲子 0,1 1 ...
4 西褲 0,1,3 2 ...
5 長(zhǎng)西褲 0,1,3,4 3 ...
6 短西褲 0,1,3,4 3 ...
7 襯衫 0,1,2 2 ...

其中,path表示父級(jí)id列表。例如西褲0,1,3就表示衣物 > 褲子
實(shí)現(xiàn)面包屑時(shí)只要取出path字段的值,然后用,分割,得到id列表
再用where id in (1,3)即可

需要顯示所有分類并表示層級(jí)時(shí),使用下面的SQL:

SELECT *,concat(path,",",id) AS paths FROM menu ORDER BY paths

看到的結(jié)果是這樣的:

id title path level paths
1 衣物 0 0 0,1
2 上衣 0,1 1 0,1,2
7 襯衫 0,1,2 2 0,1,2,7
3 褲子 0,1 1 0,1,3
4 西褲 0,1,3 2 0,1,3,4
5 長(zhǎng)西褲 0,1,3,4 3 0,1,3,4,5
6 短西褲 0,1,3,4 3 0,1,3,4,6

那么,直接取出結(jié)果輸出即可。level字段就是層級(jí)的意思
例如在PHP中,可以用str_repeat("--> ", $level)直接輸出表示層級(jí)的前綴
并且連順序都排好了,是不是很方便呢?

本文首發(fā)于我的博客 超能小紫,如果喜歡請(qǐng)常來(lái)玩哦

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31962.html

相關(guān)文章

  • 分層數(shù)據(jù)Hierarchical Data探索(1.遞歸)

    摘要:分層數(shù)據(jù)探索例如無(wú)限級(jí)分類多級(jí)菜單省份城市引言什么是分層數(shù)據(jù)類似于樹(shù)形結(jié)構(gòu),除了根節(jié)點(diǎn)和葉子節(jié)點(diǎn)外,所有節(jié)點(diǎn)都有一個(gè)父節(jié)點(diǎn)和一個(gè)或多個(gè)子節(jié)點(diǎn)。接下來(lái)我會(huì)先通過(guò)一般方法和遞歸方法來(lái)實(shí)現(xiàn)無(wú)限極分類,然后再通過(guò)兩種數(shù)據(jù)模型來(lái)談一談分層數(shù)據(jù)的處理。 分層數(shù)據(jù)Hierarchical Data探索(例如:無(wú)限級(jí)分類、多級(jí)菜單、省份城市) 引言 什么是分層數(shù)據(jù)? 類似于樹(shù)形結(jié)構(gòu),除了根節(jié)點(diǎn)和葉子節(jié)...

    yzd 評(píng)論0 收藏0
  • JavaScript實(shí)現(xiàn)無(wú)限級(jí)遞歸樹(shù)

    摘要:需求最近遇到一個(gè)需求,平時(shí)被后臺(tái)慣著直接返回了樹(shù)形結(jié)構(gòu)給到前端,前端對(duì)這種嵌套類型的數(shù)據(jù)如地區(qū)的級(jí)聯(lián)或菜單的樹(shù)形結(jié)構(gòu)省掉了一層處理。當(dāng)然,沒(méi)用好就相當(dāng)于一堆廢鐵,甚至將導(dǎo)致一些不可預(yù)料的結(jié)果。相比起遞歸,我更喜歡這種方法。 需求 最近遇到一個(gè)需求,平時(shí)被后臺(tái)慣著直接返回了樹(shù)形結(jié)構(gòu)給到前端,前端對(duì)這種嵌套類型的數(shù)據(jù)(如地區(qū)的級(jí)聯(lián)或菜單的樹(shù)形結(jié)構(gòu))省掉了一層處理。換了個(gè)后臺(tái)小哥哥返回了扁平...

    atinosun 評(píng)論0 收藏0
  • 在數(shù)據(jù)庫(kù)中存儲(chǔ)一棵樹(shù),實(shí)現(xiàn)無(wú)限級(jí)分類

    摘要:第三條同樣需要遞歸,因?yàn)橥ㄟ^(guò)一個(gè)分類,數(shù)據(jù)庫(kù)中只存儲(chǔ)了其直屬父類,需要通過(guò)遞歸到頂級(jí)分類才能獲取到它們之間的所有分類信息。 原文發(fā)表于我的博客: https://blog.kaciras.net/article/36 在一些系統(tǒng)中,對(duì)內(nèi)容進(jìn)行分類是必需的功能。比如電商就需要對(duì)商品做分類處理,以便于客戶搜索;論壇也會(huì)分為很多板塊;門戶網(wǎng)站、也得對(duì)網(wǎng)站的內(nèi)容做各種分類。 分類對(duì)于一個(gè)內(nèi)容展...

    Airy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<