首页 > 数据库 >mysql根据父节点递归查询所有子节点

mysql根据父节点递归查询所有子节点

时间:2024-03-05 15:03:37浏览次数:27  
标签:递归 parent pid ids 节点 mysql 查询 id SELECT

SELECT t3.*
FROM(SELECT t1.*,
            IF (FIND_IN_SET(parent_id, @pids) > 0,@pids := CONCAT(@pids, ',', id),'0') AS ischild
     FROM(SELECT t.id,t.parent_id,t.NAME
          FROM t_parent AS t
          ORDER BY t.id ASC) t1,
         (SELECT @pids := '0') t2) t3
WHERE ischild != '0'

使用时候把 t_parent 改成自己表,@pids := '0’ 这个是要查询的父id号(不包含自身)

SELECT rd.* 
FROM (SELECT * FROM sys_dict WHERE parent_id IS NOT NULL) rd,
     (SELECT @pid := '1') pd 
WHERE FIND_IN_SET(parent_id, @pid) > 0 
  AND @pid := concat(@pid, ',', id) 
union select * from sys_dict where id = @pid;

使用时候把 sys_dict 改成自己表,@pid := '1' 这个是要查询的父id号(包含自身)

如果不想查询结果包含自身,去掉后边的union

 

通过子id查询父id到根节点

SELECT t3.*
FROM(SELECT t1.*,
            IF (FIND_IN_SET(id, @ids) > 0,@ids := CONCAT( parent_id,',', @ids),'0') AS isparent
     FROM(SELECT t.id,t.parent_id,t.NAME
          FROM t_parent AS t
          ORDER BY t.id DESC) t1,
         (SELECT @ids := '111') t2) t3
WHERE t3.isparent != '0'

使用时候把t_parent 改成自己表,@ids := '111’这个是要查询的子id号,还有和查询父id不同的地方是ORDER BY t.id DESC,这里使用desc排序

 

标签:递归,parent,pid,ids,节点,mysql,查询,id,SELECT
From: https://www.cnblogs.com/huang2979127746/p/18054041

相关文章

  • Mysql之SQL语句初体验
    前言本文通过简单的示例去了解Mysql的DDL、DML、DCL的语句用法。一、DDL语句DDL(DataDefinitionLanguage)语句:数据定义语言,主要是进行定义/改变表的结构、数据类型、表之间的链接等操作。常用的语句关键字有CREATE、DROP、ALTER等。获取帮助信息mysql>HELPCREATE......
  • MySQL字段长度详解 附实操分析
    一、前言搜了下有关方面的内容发现良莠不齐。大部分人对这方面的内容也比较模糊,先附上MYSQL常用类型图。二、字节首先需要达成共识的是:1个Byte字节等于8个bit位。bit是最小一级的信息单位,可以表示一个0或1(即二进制);那么由此我们可以计算,一个字节其实可以表示256种取值。计算方......
  • mysql 8 修改账号密码
    一进入Mysqlbin目录cmd运行(跳过密码),运行完不要关闭mysqld--console--skip-grant-tables--shared-memory二新打开一个cmdmysqlbin目录下登录,密码输入时,直接回车mysql-uroot-p三修改密码mysql>usemysql;mysql>updateusersetauthentication_string=......
  • Ubuntu2.0解压安装mysql8.0
    https://www.cnblogs.com/dodoye/articles/15501845.html踩过的坑:linux版本和下载的版本不匹配,卸载不完全有些残留 二、解压、安装等dodo@gk-oa:~$tar-xvfmysql-server_8.0.23-1ubuntu20.04_amd64.deb-bundle.tarlibmysqlclient21_8.0.23-1ubuntu20.04_amd64.deblib......
  • mysql8.0 性能优化配置 innodb_buffer_pool_size(配置原则和方式)
    1. BufferPool缓冲池是主内存中的一个区域,InnoDB在访问表和索引数据时会在该区域进行缓存。缓冲池允许直接从内存访问频繁使用的数据,这加快了处理速度。在专用服务器上,通常会将高达80%的物理内存分配给缓冲池。2.简单优化把innodb_buffer_pool_size设置为1G。专用服务......
  • Kubelet安装时子节点出现:kube-proxy-7jxg4 ContainerCreating
    一般分为两种情况主节点问题和kube-proxy问题:1、查看报错:kubectldescribepodkube-proxy-7jxg4-nkube-system2、子节点查看相关报错信息journalctl-ukubelet-f可以看出是创建容器失败:1、可能是docker镜像没有导入2、网络问题,重启看一下cri-docker是否有报错信息......
  • Centos7安装mysql8版本(亲测可用)
    Step1进入MYSQL官网下载https://www.mysql.com/downloads/ MySQLEnterpriseEdition企业版本 需付费,可以试用30天,提供了更多的功能和更完备的技术支持,更适合于对数据库的功能和可靠性要求较高的企业客户。 MySQLClusterCGE高级集群版 需付费,是一个实时开源事......
  • mysql 8 不能启动
    问题:启动systemctlstartmysqld.serviceJobformysqld.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"systemctlstatusmysqld.service"and"journalctl-xe"fordetails.查看状态:systemctlstatusmysqld.service  mysqld.se......
  • 未完成编辑 Linux CentOS7.6使用腾讯Yum源安装MySQL5.7,执行mysql-secure-installation
    学习安装MySQL时发现官方源很慢,试了国内腾讯源快,记录一下LinuxCentOS7.6前置环境:CPU1内存4GB硬盘SCSI20GB网络模式桥接系统内为自动DHCPpingqq.com可通互联网以下为MySQL5.7安装步骤编辑新repo库路径:/etc/yum.repos.d/mysql-community.repovi/etc/yum.repos......
  • 从MySQL到ByteHouse,抖音精准推荐存储架构重构解读
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群抖音依靠自身推荐系统为用户推送可能感兴趣的视频内容,其中兴趣圈层是推荐的重要能力,通过理解核心用户的偏好特征,判断两者偏好的相似性,从而构建同类用户的兴趣圈层,实现精准推荐。以往的兴趣圈......