萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql中多級分類存儲方式(產品分類,文章分類)

mysql中多級分類存儲方式(產品分類,文章分類)

多級分類我們接觸不少了常用於產品分類,文章分類之類的,今天我們來看看常規多級分類(產品分類,文章分類)在mysql中的存儲方式的一篇文章,希望對各位有幫助。

在日常工作中,我們會經常碰到產品分類,文章分類等等修改不頻繁的多級分類。通常的做法是類似於這樣的結構:

常規做法

如果按照多級查詢的話,采用以下sql語句就可以:

SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4
FROM category AS t1
LEFT JOIN category AS t2 ON t2.parent = t1.category_id
LEFT JOIN category AS t3 ON t3.parent = t2.category_id
LEFT JOIN category AS t4 ON t4.parent = t3.category_id
WHERE t1.name = 'ELECTRONICS';

 

缺點:  代碼如下 復制代碼 舉一個實際的例子吧--產品分類一共三級,所有的產品關聯的分類均是第三級葉子節點。現在的需求是,通過頂級分類,查詢所有這個大分類下包含的產品?

左值右值方法

那我們來看看這種方式,先看原理吧

我們用嵌套的方式來表達多層關系,建表的時候加上左右值,結構如下:

 

那這時候你肯定會問,左右值是怎麼計算出來的?請接著看下面張圖:

 

 

估計你看完這兩張圖後,就明白其中的技巧了,那我們來看看這樣的結構有什麼好處? 我們來解決常規做法中的那個產品分類的問題  代碼如下 復制代碼 假設頂級分類選擇的就是根節點,然後要查詢所有旗下的產品 
select category_id from category where lft>1 and rgt<20 要是想查詢子樹也是同樣的道理~  代碼如下 復制代碼 擴展一下,還可以給每條記錄加入父節點id字段,這樣也就擁有了基礎方法的屬性 缺點:  代碼如下 復制代碼 如果要加入和刪除一個節點,就要重新對所有節點進行左值右值計算!!!
copyright © 萬盛學電腦網 all rights reserved