MySQL分类表设计--根据ID删除全部子类
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');