MySQL分类表设计–根据ID删除全部子类

在做数据库分类表的时候,通常会有这样的设计:一个字段是ID,另一个字段PID,PID指向自己的上级分类;

这样的设计带来的问题是:我要删除一个类,我希望它的子类全部一起删除;

在不知道分类有多少层级的时候,删除全部子类是非常麻烦的一件事情。

 

在设计表之初,只需要多一个辅助字段path,令path记住自己的id路径即可解决这个问题。

比如:电视的ID是1,它的PID是0(表示没有父类),海尔电视的ID是2,海尔电视的PID是1;

这时候电视的path就是”0,1″,海尔电视的path就是”0,1,2″。

在查询的时候,使用MySQL自带的FIND_IN_SET()函数即可。

 

CREATE TABLE `cls` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `pid` int(10) unsigned DEFAULT NULL,
  `path` varchar(10) DEFAULT NULL,
  `level` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;


##根据ID,查找此ID下的所有子类
SELECT * FROM `cls` AS T WHERE FIND_IN_SET('2',T.path);

##可以试试下一句看看效果
SELECT FIND_IN_SET('b','a,b,c,d');

 

posted on 2017-11-29 21:57 疯狂的妞妞 阅读() 评论() 编辑 收藏

版权声明:本文为chenss15060100790原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/chenss15060100790/p/7922946.html