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

來源:互聯網
上載者:User

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

常規做法

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

SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4FROM category AS t1LEFT JOIN category AS t2 ON t2.parent = t1.category_idLEFT JOIN category AS t3 ON t3.parent = t2.category_idLEFT JOIN category AS t4 ON t4.parent = t3.category_idWHERE t1.name = 'ELECTRONICS';

 

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

左值右值方法

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

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

 

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

 

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.