如何让MySQL中单句实现无限层次父子关系查询


本文摘自PHP中文网,作者jacklove,侵删。

在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。
在 MySQL 中,这个需求的实例稍显复杂, MySQL 中没有支持递归的查询,没有表值函数,函数不支持递归,所以通常都是用循环实现,显得比较别扭。今天看到一个用单条语句实现的递归查询,想法独特,分享一下。

相关mysql视频教程推荐:《mysql教程》

表结构和数据

1

2

3

4

5

6

7

8

9

CREATE TABLE table1(id int, name varchar(10), parent_id int);

INSERT table1 VALUES

(1, ‘Home’,        0),

(2, ‘About’,       1),

(3, ‘Contact’,     1),

(4, ‘Legal’,         2),

(5, ‘Privacy’,      4),

(6, ‘Products’,   1),

(7, ‘Support’,     2);

查询 id = 5 的所有父级

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

SELECT ID.level, DATA.* FROM(

 

    SELECT

 

        @id as _id,

 

        (   SELECT @id := parent_id

 

            FROM table1

 

            WHERE id = @id

 

        ) as _pid,

 

        @l := @l+1 as level

 

    FROM table1,

 

        (SELECT @id := 5, @l := 0 ) b

 

    WHERE @id > 0

) ID, table1 DATA

WHERE ID._id = DATA.id

ORDER BY level;

根据这个父级查询方法,很容易可以写出查所有子级的,下面的查询 id=2 的所有子级

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

SELECT ID.level, DATA.* FROM(

 

    SELECT

 

        @ids as _ids,

 

        (   SELECT @ids := GROUP_CONCAT(id)

 

            FROM table1

 

            WHERE FIND_IN_SET(parent_id, @ids)

 

        ) as cids,

 

        @l := @l+1 as level

 

    FROM table1,

 

        (SELECT @ids :=’1’, @l := 0 ) b

 

    WHERE @ids IS NOT NULL

) id, table1 DATA

WHERE FIND_IN_SET(DATA.id, ID._ids)

ORDER BY level, id

本文讲解了如何让MySQL中单句实现无限层次父子关系查询,更多相关内容请关注php中文网。

相关推荐:

带进度的SQL Server FileStream如何存取

当忘记 SQL Server 管理员密码该如何处理

浅析MySQL中concat以及group_concat的使用

以上就是如何让MySQL中单句实现无限层次父子关系查询的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql jdbc连接步骤及常见参数

mysql server如何关闭

mysql的常用命令有哪些

mysql 数据库 索引和事务

mysql 字符串拆分操作(含分隔符的字符串截取)

mysql 如何将timestamp转换为date

设计性能更优mysql数据库schema

mysql如何修改表字符编码

详解mysql基本操作语句命令

mysql实现连续签到断签一天从头开始方法实例

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...