鍍金池/ 問答/Java  PHP  數(shù)據(jù)庫/ 無限分類,如何查詢所有后代分類下數(shù)據(jù)?

無限分類,如何查詢所有后代分類下數(shù)據(jù)?

在無限分類時,頂級分類下有無數(shù)子分類,子分類又有孫分類,子子孫孫無窮盡也。
那么,但我要查詢某一個分類,已經(jīng)它的后臺分類下的所有數(shù)據(jù)并且排序時怎么處理。
舉例,有一張分類表,有一張文章表,分類中有頂級分類國內(nèi)新聞,國內(nèi)新聞下分類下有社會新聞、科技新聞、娛樂新聞等等頻道,我要瀏覽國內(nèi)新聞時,把社會新聞、科技新聞、娛樂新聞等子分類下所屬的新聞查出來統(tǒng)一展示,可以可以先查詢出國內(nèi)新聞下的所有子分類和孫分類、后代分類,然后查詢

SELECT FROM `article` WHERE `cate`=41 AND `cate`=52 AND `cate`=56 AND ...LIMIT 0,20

但是,如果該網(wǎng)站分類不是普通的分類,而是類似標(biāo)簽,且標(biāo)簽有子標(biāo)簽,子標(biāo)簽還有子標(biāo)簽,每個標(biāo)簽的子標(biāo)簽可能達(dá)到數(shù)百數(shù)千時怎么辦呢?

如果一個子標(biāo)簽,可以同時擁有兩個及兩個以上的父標(biāo)簽?zāi)?/p>

回答
編輯回答
下墜

層級節(jié)點(diǎn),做code,看一下我天朝的行政區(qū)劃代碼,

第一層 第二層 第三層
100 100100 100100100
200 200100 200100100
300 300100 300100100

查詢某個節(jié)點(diǎn)的子集(子子集等),like '100%';

idpid保留,兩種模式。

2017年7月19日 21:23
編輯回答
司令

mysql中增加pids字段,存儲所有父級id,通過分隔符分隔。
查詢時使用like、instr、locate之類的語法進(jìn)行查詢是否包含父級id

2017年1月31日 03:40
編輯回答
情皺

使用 mysql 預(yù)排序遍歷樹算法

2017年12月29日 08:33
編輯回答
落殤

使用CTE, Mysql從8.0開始支持CTE

2017年3月20日 23:48
編輯回答
葬憶

涉及到你的表結(jié)構(gòu)如何設(shè)計(jì),典型的樹形結(jié)構(gòu),可以了解一下 The Nested Set Model。

結(jié)構(gòu)圖如下:
clipboard.png

表結(jié)構(gòu)如下:
clipboard.png

參考:


或者考慮動態(tài) schema 的設(shè)計(jì),即 (schema-less),
這樣的話,可以考慮使用 NoSQL 如: mongoDB

參考:

2018年8月23日 07:08
編輯回答
檸檬藍(lán)

第二個,閉包表。http://mp.weixin.qq.com/s/a8k...

2018年7月13日 15:26
編輯回答
情殺

要么在數(shù)據(jù)庫里完成遞歸,要么程序里寫遞歸

2017年12月19日 14:26
編輯回答
毀憶

遞歸,子級的pid=父級的id

2018年4月19日 07:13