数据表结构如下:
| category | CREATE TABLE category
(id
int(11) NOT NULL DEFAULT '0',pid
int(11) DEFAULT NULL,title
varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,name
varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
问题:
现在每一个分类都可以是无限级,随便点击一个全部,展现所有当前分类下面的子分类数据。
比如:点击了食品分类
逻辑:食品中有水果,蔬菜,水果里有苹果,香蕉,蔬菜里有西蓝花,白菜,等等。
点击食品后,怎么把苹果,香蕉,西蓝花,白菜的所有数据展现出来?
也就是说,不管点击哪个分类,都把当前分类下面的所有子分类下面的数据都返回。
请问怎么搞呢?(PHP)
category
表里加个字段 path
,
ALTER TABLE `category`
ADD COLUMN `path` varchar(255) NULL DEFAULT 0 AFTER `name`;
以逗号逐级分隔所有父类,
id | pid | name | path |
---|---|---|---|
1 | 0 | 食品 | 0 |
2 | 1 | 水果 | 0,1 |
3 | 1 | 蔬菜 | 0,1 |
4 | 2 | 苹果 | 0,1,2 |
查询所有食品子类
SELECT * from category where FIND_IN_SET('1', `path`);