首页云计算 正文

MySQL多层级结构-区域表使用树

2024-11-19 5 0条评论
  1. 首页
  2. 证书相关
  3. MySQL多层级结构-区域表使用树

MySQL多层级结构-区域表使用树

发布日期:2017-05-03

1.1. 前言

前面我们大概介绍了一下树结构表的基本使用。在我们项目中有好几块有用到多层级的概念。下面我们哪大家都比较熟悉的区域表来做演示。

1.2. 表结构和数据

区域表基本结构,可能在你的项目中还有包含其他字段。这边我只展示我们关心的字段:

1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE ` area ` (    ` area_id ` int ( 11 ) NOT NULL AUTO_INCREMENT COMMENT ‘地区ID’ ,    ` name ` varchar ( 40 ) NOT NULL DEFAULT ‘unkonw’ COMMENT ‘地区名称’ ,    ` area_code ` varchar ( 10 ) NOT NULL DEFAULT ‘unkonw’ COMMENT ‘地区编码’ ,    ` pid ` int ( 11 ) DEFAULT NULL COMMENT ‘父id’ ,    ` left_num ` mediumint ( 8 ) unsigned NOT NULL COMMENT ‘节点左值’ ,    ` right_num ` mediumint ( 8 ) unsigned NOT NULL COMMENT ‘节点右值’ ,    PRIMARY KEY ( ` area_id ` ) ,    KEY ` idx $ area $ pid ` ( ` pid ` ) ,    KEY ` idx $ area $ left_num ` ( ` left_num ` ) ,    KEY ` idx $ area $ right_num ` ( ` right_num ` ) )

区域表数据: area

导入到test表

1 mysql uroot proot test < area . sql

1.1. 区域表的基本操作

查看 ‘广州’ 的相关信息

1 2 3 4 5 6 SELECT * FROM area WHERE name LIKE ‘%广州%’ ; + + + + + + + | area_id | name        | area_code | pid    | left_num | right_num | + + + + + + + |      2148 | 广州市      | 440100      | 2147 |      2879 |        2904 | + + + + + + +

查看 ‘广州’ 所有孩子

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 SELECT c . * FROM area AS p , area AS c WHERE c . left_num BETWEEN p . left_num AND p . right_num    AND p . area_id = 2148 ; + + + + + + + | area_id | name        | area_code | pid    | left_num | right_num | + + + + + + + |      2148 | 广州市      | 440100      | 2147 |      2879 |        2904 | |      2161 | 从化市      | 440184      | 2148 |      2880 |        2881 | |      2160 | 增城市      | 440183      | 2148 |      2882 |        2883 | |      2159 | 花都区      | 440114      | 2148 |      2884 |        2885 | |      2158 | 番禺区      | 440113      | 2148 |      2886 |        2887 | |      2157 | 黄埔区      | 440112      | 2148 |      2888 |        2889 | |      2156 | 白云区      | 440111      | 2148 |      2890 |        2891 | |      2154 | 天河区      | 440106      | 2148 |      2892 |        2893 | |      2153 | 海珠区      | 440105      | 2148 |      2894 |        2895 | |      2152 | 越秀区      | 440104      | 2148 |      2896 |        2897 | |      2151 | 荔湾区      | 440103      | 2148 |      2898 |        2899 | |      2150 | 东山区      | 230406      | 2148 |      2900 |        2901 | |      2149 | 其它区      | 440189      | 2148 |      2902 |        2903 | + + + + + + +

查看 ‘广州’ 所有孩子 和 深度 并显示层级关系

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 SELECT sub_child . area_id ,    ( COUNT ( sub_parent . name ) 1 ) AS depth ,    CONCAT ( REPEAT ( ‘  ‘ , ( COUNT ( sub_parent . name ) 1 ) ) , sub_child . name ) AS name FROM (    SELECT child . *    FROM area AS parent , area AS child    WHERE child . left_num BETWEEN parent . left_num AND parent . right_num      AND parent . area_id = 2148 ) AS sub_child , (         SELECT child . *    FROM area AS parent , area AS child    WHERE child . left_num BETWEEN parent . left_num AND parent . right_num      AND parent . area_id = 2148 ) AS sub_parent WHERE sub_child . left_num BETWEEN sub_parent . left_num AND sub_parent . right_num GROUP BY sub_child . area_id ORDER BY sub_child . left_num ; + + + + | area_id | name          | depth | + + + + |      2148 | 广州市        |      0 | |      2161 |    从化市      |      1 | |      2160 |    增城市      |      1 | |      2159 |    花都区      |      1 | |      2158 |    番禺区      |      1 | |      2157 |    黄埔区      |      1 | |      2156 |    白云区      |      1 | |      2154 |    天河区      |      1 | |      2153 |    海珠区      |      1 | |      2152 |    越秀区      |      1 | |      2151 |    荔湾区      |      1 | |      2150 |    东山区      |      1 | |      2149 |    其它区      |      1 | + + + +

显示 ‘广州’ 的直系祖先(包括自己)

1 2 3 4 5 6 7 8 9 10 11 SELECT p . * FROM area AS p , area AS c WHERE c . left_num BETWEEN p . left_num AND p . right_num    AND c . area_id = 2148 ; + + + + + + + | area_id | name        | area_code | pid    | left_num | right_num | + + + + + + + |      2147 | 广东省      | 440000      |      0 |      2580 |        2905 | |      2148 | 广州市      | 440100      | 2147 |      2879 |        2904 | |      3611 | 中国        | 100000      |    1 |          1 |        7218 | + + + + + + +

向 ‘广州’ 插入一个地区 ‘南沙区’

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 更新左右值 UPDATE area SET left_num = left_num + 2 WHERE left_num > 2879 ; UPDATE area SET right_num = right_num + 2 WHERE right_num > 2879 ; 插入 ‘南沙区’ 信息 INSERT INTO area SELECT NULL , ‘南沙区’ , ‘440115’ , 2148 , left_num + 1 , left_num + 2 FROM area WHERE area_id = 2148 ; 查看是否满足要求 SELECT c . * FROM area AS p , area AS c WHERE c . left_num BETWEEN p . left_num AND p . right_num    AND p . area_id = 2148 ; + + + + + + + | area_id | name        | area_code | pid    | left_num | right_num | + + + + + + + |      2148 | 广州市      | 440100      | 2147 |      2879 |        2906 | |      3612 | 南沙区      | 440115      | 2148 |      2880 |        2881 | |      2161 | 从化市      | 440184      | 2148 |      2882 |        2883 | |      2160 | 增城市      | 440183      | 2148 |      2884 |        2885 | |      2159 | 花都区      | 440114      | 2148 |      2886 |        2887 | |      2158 | 番禺区      | 440113      | 2148 |      2888 |        2889 | |      2157 | 黄埔区      | 440112      | 2148 |      2890 |        2891 | |      2156 | 白云区      | 440111      | 2148 |      2892 |        2893 | |      2154 | 天河区      | 440106      | 2148 |      2894 |        2895 | |      2153 | 海珠区      | 440105      | 2148 |      2896 |        2897 | |      2152 | 越秀区      | 440104      | 2148 |      2898 |        2899 | |      2151 | 荔湾区      | 440103      | 2148 |      2900 |        2901 | |      2150 | 东山区      | 230406      | 2148 |      2902 |        2903 | |      2149 | 其它区      | 440189      | 2148 |      2904 |        2905 | + + + + + + +

 

 

文章转载来自:trustauth.cn

上一篇:xtrabackup开启新实例

下一篇:resolv.conf文件配置详解

相关新闻

  • SSL证书对网站访问速度有影响吗
  • 个人隐私数据泄露有哪些危害?如何预防?
  • 部署SSL证书有哪些常见的错误
  • 国际证书、国产证书和国密证书
  • 游戏开发为什么离不开代码签名?
  • 僵尸网络攻击手法与防范方式
  • SSL证书助力保障网络数据安全
  • 网站加密与不加密区别
  • SSL证书有哪些类型和价格差异
  • ca机构颁发的证书包括那些内容呢?
文章版权及转载声明

本文作者:admin 网址:http://news.edns.com/post/113245.html 发布于 2024-11-19
文章转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码