百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql中多级分类存储方式(产品分类,文章分类)
分享文章到:

mysql中多级分类存储方式(产品分类,文章分类)

发布时间:01/15 来源: 浏览: 关键词:
多级分类我们接触不少了常用于产品分类,文章分类之类的,今天我们来看看常规多级分类(产品分类,文章分类)在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字段,这样也就拥有了基础方法的属性
缺点:
 代码如下
如果要加入和删除一个节点,就要重新对所有节点进行左值右值计算!!!
打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有15人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板