sql根据一个子节点ID查询父级信息
文章目录
前言
上次写了根据一个ID,查询下级用户信息,本次反着来,通过一个子ID查询父级的信息。
一、问题描述?
查询物品分类信息,需要查询物品的一级分类,二级分类(我做的是商品二级分类信息)
解决方法:
第一种是代码,递归。
第二种就是用sql解决。
- 图解
二、数据库相关设计
1.数据结构设计
sql脚本如下:
CREATE TABLE `leku_life_circle_goods_category` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类id',
`category_parent_id` int(11) NOT NULL COMMENT '父类',
`category_icon` varchar(255) DEFAULT NULL COMMENT '图标',
`category_name` varchar(20) NOT NULL COMMENT '分类名称',
`category_level` int(4) DEFAULT NULL COMMENT '1,一级分类,2,二级分类,3,三级分类',
`category_sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
`category_is_show` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否显示,0不显示,1显示',
PRIMARY KEY (`id`) USING BTREE,
KEY `parentId` (`category_parent_id`,`category_is_show`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=442 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
2.部分数据
(示例):
3.sql 根据子id 查询父级信息sql 脚本
SELECT T2.id, T2.category_name
FROM (
SELECT
@r AS _id,
(SELECT @r := category_parent_id FROM leku_life_circle_goods_category WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := 386, @l := 0) vars,
leku_life_circle_goods_category h
WHERE @r <> 0) T1
JOIN leku_life_circle_goods_category T2
ON T1._id = T2.id
WHERE T2.category_is_show = 1
ORDER BY T1.lvl DESC
4.可能用到(mybatis 大于等于小于等于的写法)
第一种写法(1):
原符号 < <= > >= & ' "
替换符号 < <= > >= & ' "
例如:sql如下:
create_date_time >= #{startTime}
and
create_date_time <= #{endTime}
第二种写法(2):
大于等于
<![CDATA[ >= ]]>
小于等于
<![CDATA[ <= ]]>
例如:sql如下:
create_date_time <![CDATA[ >= ]]> #{startTime}
and
create_date_time <![CDATA[ <= ]]> #{endTime}
总结
本次主要记录,工作日常,以备后面复用,如果大家有帮助,可以收藏一下。