MySQL根据父节点id查询所有子节点信息

这篇具有很好参考价值的文章主要介绍了MySQL根据父节点id查询所有子节点信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

替换内容:

table_demo 替换成对应表名

pid 替换成父id的命名

id 替换成关联id的命名

state 数据状态(自定义条件,比如:数据是否可用)

code 替换成要查询的 入参id值

示例:

SELECT t3.child_code  FROM (
SELECT t1.*,
IF(FIND_IN_SET(parent_code, @pids  COLLATE utf8mb4_general_ci) > 0, @pids := CONCAT(@pids, ',', child_code), if (t1.child_code = 'JG01','JG01','0')) AS ischild
FROM (
SELECT * FROM sys_org AS t WHERE t.data_state = 1 ORDER BY t.child_code ASC
) t1,
(SELECT @pids := '1001') t2
) t3 WHERE ischild != '0';

注:

  • 如出现mysql中的“非法混合排序规则”错误,查看字符集和排序规则,或者添加 COLLATE utf8mb4_general_ci

1、查看MySQL数据库服务器和数据库MySQL字符集。

SHOW VARIABLES LIKE 'character%';

2、查看mysql 所有数据库字符集

Select

SCHEMA_NAME,DEFAULT_CHARACTER_SET_NAME,DEFAULT_COLLATION_NAME,SQL_PATH from information_schema.SCHEMATA;

3、查看mysql数据表的字符集

show table status from test like '%t6%'/G;

4、查看mysql 数据库列的字符集

show full columns from test.books;

  • find_in_set()函数

FIND_IN_SET(str,strlist),该函数的作用是查询字段(strlist) 中是否包含(str)的结果,返回结果为 null或记录 。

str 要查询的字符串

strlist 需查询的字段,参数以”,”分隔,形式如 (1,2,6,8,10,22)

假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号( , )时将无法正常运行。

SELECT FIND_IN_SET('b', 'a,b,c,d');
// 结果:2
// 因为 b 在strlist集合中2的位置, a是位置1

select FIND_IN_SET('1', '1');
// 结果:1 
// 这时候的strlist集合有点特殊,只有一个字符串

select FIND_IN_SET('2', '1,2'); 
// 结果:2

select FIND_IN_SET('6', '1'); 
// 结果:0 strlist中不存在str,所以返回0。

综上: FIND_IN_SET函数中,若前一个字符串包含在后一个字符串集合中,返回大于0的数,该数为前一个字符串在后一个字符串中的位置。

  • concat()函数

1. 含义:

将多个字符串连接成一个字符串。

2. 语法:

concat(str1, str2,...) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

3. 演示:

select concat (id, name) as info from t1;

引用:

https://blog.csdn.net/the_shy369/article/details/127134224

https://blog.csdn.net/Gan_1314/article/details/125449132文章来源地址https://www.toymoban.com/news/detail-435457.html

到了这里,关于MySQL根据父节点id查询所有子节点信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 03 SpringBoot实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)

    需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址:portal/findAllTypes 请求方式:get 请求参数:无 响应数据: 成功 代码编写 PortalController : TypeService: TypeServiceImpl: 达到的效果是,不需要任何参数, 只要访问portal/findAllType, 就返回news_type表中的所有

    2024年01月24日
    浏览(46)
  • 查询Oracle和MySQL数据库中当前所有连接信息

    查询Oracle当前所有连接信息: 查询MySQL当前所有连接信息: 在这两个查询中,我为每个字段添加了中文别名,以提高查询结果的可读性

    2024年02月12日
    浏览(71)
  • mysql、clickhouse查询数据库所有的表以及字段信息

    mysql查询数据库所有的表以及字段信息 SELECT     table_schema 数据库名,   table_name 表名,   COLUMN_NAME 列名,   COLUMN_TYPE 数据类型,   DATA_TYPE 字段类型,   CHARACTER_MAXIMUM_LENGTH 长度,   IS_NULLABLE 是否为空,   COLUMN_DEFAULT 默认值,   COLUMN_COMMENT 备注  FROM  INFORMATION_SCHEMA.COLUMNS where -- tab

    2024年02月08日
    浏览(70)
  • el-tree获取当前选中节点及其所有父节点的id(包含半选中父节点的id)

    如下图,我们现在全勾中的有表格管理及其下的子级,而半勾中的有工作台和任务管理及其子级 现在点击保存按钮后,需要将勾中的节点id及该节点对应的父节点,祖先节点的id(包含半选中父节点的id)也都一并传给后端,那这个例子里就应该共传入9个id,我们可以直接将

    2024年01月22日
    浏览(53)
  • element-tree树结构-默认选中第一个节点高亮-根据id选中节点高亮

    前言 tree树结构是在开发中经常使用的组件,比如区域树,楼层树,组织架构树,等等包含节点关系 实际开发可能需要我们一进到页面选中树形结构第一个节点,并且调用数据,来达到用户体验 在用户选择之后,通过本地存储的方式把楼层id存起来,刷新之后获取楼层id,调

    2024年02月09日
    浏览(75)
  • 交友项目【根据id查询单条动态&发布评论&查询评论列表】

    目录 1:根据id查询单条动态 1.1:接口分析 1.2:流程分析 1.3:代码实现 2:发布评论 2.1:接口分析 2.2:流程分析 2.3:代码实现 3:查询评论列表 3.1:接口分析 3.2:流程分析 3.3:代码实现 1.1:接口分析 API 接口文档: http://192.168.136.160:3000/project/19/interface/api/151 注意: 单条动

    2023年04月23日
    浏览(53)
  • 根据指定端口查询进程id,并杀掉进程

    @echo off  echo ================================================ set port=8080 netstat -nao|findstr !port! echo ================================================ for /f \\\"tokens=2,5\\\" %%i in (\\\'netstat -nao^|findstr :%%port%%\\\') do (     ::if \\\"!processed[%%j]!\\\" == \\\"\\\" (     if not defined processed[%%j] (         set pname=N/A         for /f \\\"to

    2024年02月09日
    浏览(41)
  • Java根据id对elasticsearch查询操作

    一、根据一个id查询 二、根据多个ids查询

    2024年02月12日
    浏览(52)
  • springboot+es批量新增、批量修改、根据内部id批量查询

    pom.xml配置 yml配置 EsConfig配置 ElasticSearchConfig 配置 启动类配置 //批量操作的对象 批量修改 批量新增 根据es内部id批量查询数据

    2024年02月11日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包