liuxuean 2016-04-15 11:06:33 2932次浏览 1条回复 0 0 0

有时候用户的要求是千奇百怪的 ,在开发中什么变态的要求都有,作为开发人员你又不得不去实现一些比较变态的要求,此时我得出的一句话:‘傻逼智能’ 当然,我这里只是普通的一些要求。 最近在开发一个商品平台时,偶尔遇到一个面包屑的功能,要求查找出所有子类别上面的所以父类别,????要是平时叫我找出父类别下面的所有子类别还好,突然间倒过来了。没办法只能用子查询去查:

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');

您需要登录后才可以回复。登录 | 立即注册