mysql 无限级分类

2011-05-17 23:28  831人阅读  评论 (0)
Tags: mysql

无限级分类的话题很多人在考虑,之前我也考虑过,最近朋友要用就重新整理了一下写成博文,分享给大家。

基本思路是使用一个“分类链”的字段,把父级分类的id用逗号隔开,然后使用find_in_set函数判断是否是某个分类的子分类。

表结构:

CREATE TABLE IF NOT EXISTS `link` (
    `id` int(11) NOT NULL auto_increment,
    `name` varchar(10) NOT NULL,
    `pid` int(11) NOT NULL,
    `link` text NOT NULL,
    `level` int(11) NOT NULL,
    PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;添加数据

INSERT INTO `link` (`id`, `name`, `pid`, `link`, `level`) VALUES
(1, 'name1', 0, '1', 1),
(2, 'name2', 0, '2', 1),
(3, 'name3', 1, '1,3', 2),
(4, 'name4', 2, '2,4', 2),
(5, 'name5', 3, '1,3,5', 3),
(6, 'name6', 4, '2,4,6', 3),
(7, 'name7', 3, '1,3,7', 3),
(8, 'name8', 4, '2,4,8', 3);测试

select * from link where id = 1
select * from link where pid = 1 //下一级
select * from link where find_in_set(1, link) //所有下级 包含自己
select * from link where find_in_set(1, link) and level >1 //所有下级 不包含自己
select * from link where find_in_set(1, link) and id <> 1
select * from goods where cid in (select id from link where find_in_set(3, link)) //商品表关联