当前位置:首页 » Mysql技术教程

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

2017-11-29 22:01 本站整理 浏览(4)

在做数据库分类表的时候,通常会有这样的设计:一个字段是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');