MySQL递归获取商品分类以及所有下级分类商品

news2024/11/22 14:23:05

现在就是我们有一张商品表,还有一张分类表,商品表有一个字段用来记录当前商品分类id的,然后查询时候因为分类是有层级的,如果我们想通过顶层分类获取到它和所有子类的商品时就会需要用到MySQL的递归查询了。

首先是针对 MySQL 8.0 及以上版本,因为已经自带了 WITH RECURSIVE 递归函数,所以查询时简单很多,直接看 SQL

WITH RECURSIVE category_tree AS (
    SELECT id
    FROM category
    WHERE id = 1  -- 起始分类ID
    UNION ALL
    SELECT c.id
    FROM category c
    INNER JOIN category_tree ct ON c.parent_id = ct.id
)
SELECT g.*
FROM goods g
INNER JOIN category_tree ct ON g.category_id = ct.id;

看一下查询结果

在这里插入图片描述

这么写可能有些人看着有些奇怪,我们换个方式就好理解一些

WITH RECURSIVE category_tree AS (
    SELECT id
    FROM category
    WHERE id = 1  -- 起始分类ID
    UNION ALL
    SELECT c.id
    FROM category c
    INNER JOIN category_tree ct ON c.parent_id = ct.id
) SELECT id FROM category_tree

从下面的查询结果可以看到 WITH RECURSIVE 可以通过顶层的分类 id 获取其所有的下级分类 id,拿到这些 id 自然就可以查询到它所有的商品

在这里插入图片描述

这样我们在代码里面就可以这样写

在这里插入图片描述

上面说了 WITH RECURSIVE 是 MySQL 8.0 才有的函数,那么 MySQL 8.0 以下有没有办法查,答案当然是有的

SELECT g.*
FROM goods g
WHERE g.category_id IN
(SELECT 
    T2.id
FROM 
    (SELECT @r AS _id, 
            @r := (SELECT id FROM category WHERE parent_id = _id LIMIT 1) AS id
     FROM 
            (SELECT @r := 1) vars,
            category
     WHERE 
            @r IS NOT NULL) T1 
JOIN 
    category T2 
ON 
    T1._id = T2.parent_id OR T1._id = T2.id
ORDER BY 
    T2.id);

可以看到查询结果是一样的

在这里插入图片描述

关于这种递归我之前就写过一篇博客,大家有兴趣可以去看一下 MySQL通过SQL语句进行递归查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2098180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NCMMSC-CNVSRC 2024视觉语音识别竞赛圆满落幕

8月16日上午,NCMMSC-CNVSRC 2024 学术研讨会在乌鲁木齐召开的第十九届全国人机语音通讯学术会议(NCMMSC 2024)上举行。会上公布了本次视觉语音识别竞赛 CNVSRC 2024 的最终结果,并举行了颁奖仪式。 本次竞赛由 NCMMSC 2024 组委会…

springboot+vue 进销存管理系统

springbootvue 进销存管理系统 相关技术springbootmybatismysqlmavenvueelementui

ANet-1E1S1智能网关:物联网时代的能源计量新纪元,断点续传引领高效运维

在万物互联的物联网时代,数据的精准采集与高效传输成为了推动各行业智能化转型的关键。ANet-1E1S1以其断点续传技术与强大的RS485接口智能通信管理能力,为水、电、气、油等多领域能源管理带来了便捷与效率的提升。基于嵌入式Linux平台的通用型智能通信管…

高经费打造的史诗级视觉盛宴,惊叹于每一帧的奢华

8月29日,备受期待的《指环王:力量之戒》第二季终于上线了。这一季一上架就放出了三集,立刻引发了影迷们的热烈讨论。 自从2022年首季首播以来,《指环王:力量之戒》就一直备受瞩目。尽管首季受到了不少争议,…

【开源大模型生态2】数据、算力、算法,越来越猛!

人工智能(A)的快速发展依赖于三个核心要素:数据,算法,算力。这个观点已经得到了业界的高度认可。只有这三个要素同时满足了才能加速人工智能的大发展。随着人工智能大模型规模变大以及普及应用,人工智能对能源的需求也在不断加大,…

linux文件——文件系统与内存管理——理解打开文件, 写入数据与文件系统的关系

前言:本节课算是一点文件系统的补充内容。 但是说是文件系统的补充内容,其实我们也可以把这篇文章当作linux下的内存管理的文章来看待。 因为博主会从内存管理的角度, 将进程打开文件、写入数据的流程, 以非常底层的角度&#xff…

【C++】汇编分析,函数是如何调用,传参,返回

传参 有的是用寄存器传参,有的用push传参 我在MSVC编译测出来的是PUSH传参(debug模式),具体过程如下 long func(long a, long b, long c, long d,long e, long f, long g, long h) {long sum;sum (a b c d e f g h);ret…

护栏碰撞监测系统的发展前景如何?

​ ​护栏碰撞监测系统的发展前景可谓十分广阔,主要体现在以下几个方面: ​ ​一、交通领域需求持续增长 ​ ​1. 道路建设不断拓展 ​ ​●在全球范围内,公路、高速公路以及城市道路等基础设施持续处于新建与扩建的进程之中。以…

再也不用来回切换了,多微同一界面聚合聊天

手上有多个微信,工作时经常要来回切换登录,才能处理聊天和发圈等工作,来回切换不但容易导致号的状态存在异常,还会浪费很多时间登录,忙的时候还可能会导致处理不及时。 今天必须要给你们分享这个超棒的东西&#xff0…

如何写接口自动化测试断言?

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 你真的会写自动化测试断言吗? 在接口测试中,断言是一项非常重要的操作,它是用来校验接口返回结果是否符合预期的一种手段。…

OLED显示屏详解(IIC协议0.96寸 STM32)

目录 一、介绍 二、模块原理 1.原理图 2.工作原理:SSD1306显存与命令 三、程序设计 main.c文件 oled.h文件 oled.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 OLED是有机发光二极管,又称为有机电激光显示(Organic Electrol…

惊人发现:clickhouse的cpu暴增之谜

点/击/蓝/字 关/注/我/们 一、背景 前段时间,公司的生产环境的clickhouse的cpu突然持续高压,持续时间大约5个小时,特写此文记录,深挖clickhouse的原理,持续学习。 题主所在的公司的一些历史数据会保存到clickhouse中…

基于php的公司员工管理系统—计算机毕业设计源码25190

摘 要 公司公司员工管理系统除了具有共享系统的全部功能以外,能通过对数据的分析对决策做出解释是其主要的新特点。其体系结构,将由专用的服务器/客户方式向广域网发展,使更多的系统间能够互相交流数据,带动整个行业、领域知识和效…

如何解决前端跨域问题:从CORS到JSONP

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介如何解决前端跨域问题:从CORS到JSONP1. 引言2. 什么是跨域问题?2.1 同源策略(Same-Origin Policy)2.2 跨域请求的场景 3. 解决跨域问题的常见方法3.1 使用CORS(Cross-Orig…

实在智能联合案例入选中国信通院2024年度高质量数字化转型案例集

为推动数字化转型相关产业发展,培育数据要素市场,为数字化双方提供行业实践标杆参考,中国信通院铸基计划于2024年4月初启动高质量数字化转型典型案例征集工作,旨在遴选一批具有产业引领与推广应用效应的企业数字化转型典型案例。实…

【MySQL】Explain执行计划(十七)

🚗MySQL学习十七站~ 🚩本文已收录至专栏:MySQL通关路 ❤️每章节附章节思维导图,文末附全文思维导图,感谢各位点赞收藏支持~ ⭐学习汇总贴,超详细思维导图:【MySQL】学习汇总(完整思维导图) 一.…

[python]面向对象示例:学生管理系统

python面向对象 python基础知识整理 主要界面 建议跟着框架自行完成功能需求,最下面有完整带注释版本,学生信息会存到当前目录下data.txt文本中,没有则会自行创建 涉及到的知识点 面向对象列表, 字典for, if, input…文件操作 需求分析 开始 -> 循环调用主程序 ->不…

盲盒小程序开发,探索市场发展优势

随着潮玩市场的火热,盲盒已经成为了一种集娱乐、社交、消费为一体的模式,越来越多的消费者被盲盒所吸引,盲盒市场也迎来了巨大的发展空间,带来了各种商业机遇,同时为创业者提供新的创业渠道。本文将探讨盲盒小程序的开…

deepin-wine8-stable为某个windows应用设置环境变量

1 环境说明 deepin v23wine 8.16 2 操作步骤 2.1 在终端指定应用打开注册表编辑 WINEPREFIX~/.deepinwine/com.allroundautomations/ deepin-wine8-stable regeditWINEPREFIX:windows应用在wine容器中的路径,一般为~/.deepinwine/你的应用名称包regedit:注册表编…