无限分类表中如何查找所有父级元素 [ 技术分享 ]
有时候用户的要求是千奇百怪的 ,在开发中什么变态的要求都有,作为开发人员你又不得不去实现一些比较变态的要求,此时我得出的一句话:‘傻逼智能’ 当然,我这里只是普通的一些要求。 最近在开发一个商品平台时,偶尔遇到一个面包屑的功能,要求查找出所有子类别上面的所以父类别,????要是平时叫我找出父类别下面的所有子类别还好,突然间倒过来了。没办法只能用子查询去查:
SELECT * FROM e_category WHERE id in ( SELECT path FROM e_category WHERE id=124 ) or id=124
是不是搞定了,非常高兴 句子往上一扔,完了。然后运行时发现不对,MySQL当中怎么把查询出来的 '16,1,0' 当字符串了, 怎么办 然后到网上搜索了一大圈,发现仍然没有找到,于是到官方手册的转转,发现有个函数 find_in_set 于是拿来试试,呀可以
select a.id,a.cat_name,a.parent_id,a.path from category a where find_in_set(a.id,(select b.path from category b where b.id=124 )) or a.id=124
是不是搞定了,非常高兴。
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类id',
`cat_name` varchar(250) NOT NULL COMMENT '分类名称',
`parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '父分类id: 0为根分类',
`sort_order` tinyint(1) NOT NULL DEFAULT '0' COMMENT '分类排序',
`level` smallint(1) unsigned zerofill DEFAULT '0' COMMENT '级别',
`path` varchar(40) DEFAULT NULL COMMENT '路径id组',
`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否显示,默认是0显示,1不显示 ,2 删除',
PRIMARY KEY (`id`)
)
;
select a.id,a.cat_name,a.parent_id,a.path from category a where find_in_set(a.id,(select b.path from category b where b.id=".$cat_id.")) or a.id=".$cat_id;
INSERT INTO `category` VALUES ('1', '家用电器', '0', '5', '0', '1', '0', '1');
INSERT INTO `category` VALUES ('16', '大型电器', '1', '0', '1', '1', '1,0', '1');
INSERT INTO `category` VALUES ('17', '生活电器', '1', '0', '1', '1', '1,0', '1');
INSERT INTO `category` VALUES ('18', '厨房电器', '1', '0', '1', '1', '1,0', '1');
INSERT INTO `category` VALUES ('19', '个护健康', '1', '0', '1', '1', '1,0', '1');
INSERT INTO `category` VALUES ('20', '五金家装', '1', '0', '1', '1', '1,0', '1');
INSERT INTO `category` VALUES ('121', '平板电视', '16', '0', '2', '1', '16,1,0', '1');
INSERT INTO `category` VALUES ('122', '空调', '16', '0', '2', '1', '16,1,0', '1');
INSERT INTO `category` VALUES ('123', '冰箱', '16', '0', '2', '1', '16,1,0', '1');
INSERT INTO `category` VALUES ('124', '洗衣机', '16', '0', '2', '1', '16,1,0', '1');
liuxuean 深圳
注册时间:2013-04-06
最后登录:2019-08-14
在线时长:19小时48分
最后登录:2019-08-14
在线时长:19小时48分
- 粉丝5
- 金钱1035
- 威望0
- 积分1225