Mysql数据库系列(二)sql根据一个子节点ID查询父级信息

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):

原符号       <        <=      >       >=       &        '        "
替换符号     &lt;     &lt;=   &gt;     &gt;=    &amp;    &apos;   &quot;
例如:sql如下:
create_date_time &gt;= #{startTime} 
and  
create_date_time &lt;= #{endTime}

第二种写法(2):
大于等于
<![CDATA[ >= ]]>
小于等于
<![CDATA[ <= ]]>
例如:sql如下:
create_date_time <![CDATA[ >= ]]> #{startTime}
and 
create_date_time <![CDATA[ <= ]]> #{endTime}

总结

本次主要记录,工作日常,以备后面复用,如果大家有帮助,可以收藏一下。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜良配情深

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值