• sql


    我有一个MySQL表,如下所示:

    id | name        | parent_id
    19 | category1   | 0
    20 | category2   | 19
    21 | category3   | 20
    22 | category4   | 21
    ......
    

      

    现在,我想要一个MySQL查询,我只提供id [例如说'id = 19']然后我应该得到它的所有子ID [即 结果应该有ids '20,21,22'] ....而且,孩子们的等级不知道它可以变化....

    另外,我已经有了使用for循环的解决方案.....如果可能的话,让我知道如何使用单个MySQL查询来实现相同的功能。

    解决办法

    1.如果你在MySql 8上,那么使用递归where子句:

    with recursive cte (id, name, parent_id) as (
      select     id,
                 name,
                 parent_id
      from       products
      where      parent_id = 19
      union all
      select     p.id,
                 p.name,
                 p.parent_id
      from       products p
      inner join cte
              on p.parent_id = cte.id
    )
    select * from cte;

    where中指定的值应设置为要选择所有后代的父级的CONNECT BY

    2.对于不支持公用表表达式(最高版本为5.7)的MySql版本,您可以使用以下查询来实现此目的:

    select  id,
            name,
            parent_id 
    from    (select * from products
             order by parent_id, id) products_sorted,
            (select @pv := '19') initialisation
    where   find_in_set(parent_id, @pv)
    and     length(@pv := concat(@pv, ',', id))

    这是一个小提琴。

    此处,where中指定的值应设置为要选择所有后代的父级的CONNECT BY

  • 相关阅读:
    面向对象程序设计寒假作业3
    面向对象程序设计编程题完善1.0
    jq分片上传,可拖动上传
    给富文本框的头添加title
    vue的富文本编辑器使用,并且添加显示当前输入字数
    超出省略号
    关于缓存 windwo.localStorage和sessionStorage
    复制框里的内容
    同一标签添加多个背景图
    函数里添加超链接
  • 原文地址:https://www.cnblogs.com/foreversun/p/11401581.html
Copyright © 2020-2023  润新知