无限级分类就是自身连接查询,比如说淘宝的女装分类下由很多子分类,每个子分类下还有子分类并且还可以继续分,这个就是无限级分类。
结构示例:比如说服装是顶级分类编号是0,服装下面有长袖编号是1,下面还有8风袖那么他的父id就是2,二裙子是服装分类下的因此父id再写1,因此我们是通过父id的形式来实现的。
所以这个时候我们就可以来创建一个表并且把数据按照前述的父id的形式来分类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
CREATE TABLE cate( id SMALLINT UNSIGNED AUTO_INCREMENT KEY, cateName VARCHAR(100) NOT NULL UNIQUE, pId SMALLINT UNSIGNED NOT NULL DEFAULT 0 )CHARSET=UTF8; INSERT cate(cateName,pId) VALUES('服装',0); INSERT cate(cateName,pId) VALUES('数码',0); INSERT cate(cateName,pId) VALUES('箱包',0); INSERT cate(cateName,pId) VALUES('男装',1); INSERT cate(cateName,pId) VALUES('女装',1); INSERT cate(cateName,pId) VALUES('内衣',1); INSERT cate(cateName,pId) VALUES('电视',2); INSERT cate(cateName,pId) VALUES('冰箱',2); INSERT cate(cateName,pId) VALUES('洗衣机',2); INSERT cate(cateName,pId) VALUES('爱马仕',3); INSERT cate(cateName,pId) VALUES('LV',3); INSERT cate(cateName,pId) VALUES('GUCCI',3); INSERT cate(cateName,pId) VALUES('夹克',4); INSERT cate(cateName,pId) VALUES('衬衫',4); INSERT cate(cateName,pId) VALUES('裤子',4); INSERT cate(cateName,pId) VALUES('液晶电视',10); INSERT cate(cateName,pId) VALUES('等离子电视',10); INSERT cate(cateName,pId) VALUES('背投电视',10); |
查询所有的分类信息,并且得到其父分类(相当于虚拟出一张自己的表来,然后在自己和虚拟的这个和自己一样的表之间查)
1 2 3 4 5 |
-- 查询所有的分类信息,并且得到其父分类 SELECT s.id,s.cateName AS sCateName,p.cateName AS pCateName FROM cate AS s LEFT JOIN cate AS p ON s.pId=p.id; |
查询所有的分类及其子分类
1 2 3 4 5 |
-- 查询所有的分类及其子分类 SELECT p.id,p.cateName AS pCateName,s.cateName AS sCateName FROM cate AS s RIGHT JOIN cate AS p ON s.pId=p.id; |
查询所有的分类并且得到子分类的数目
1 2 3 4 5 6 |
SELECT p.id,p.cateName AS pCateName,COUNT(s.cateName) AS count FROM cate AS s RIGHT JOIN cate AS p ON s.pId=p.id GROUP BY p.cateName ORDER BY id ASC; |