MYSQL教程MySQL多层级结构-区域表使用树详解

MYSQL教程MySQL多层级结构-区域表使用树详解,第1张

概述介绍《MYSQL教程MySQL多层级结构-区域表使用树详解》开发教程,希望对您有用。

《MysqL教程MysqL多层级结构-区域表使用树详解》要点:
本文介绍了MysqL教程MysqL多层级结构-区域表使用树详解,希望对您有用。如果有疑问,可以联系我们。

1.1. 前言MysqL数据库

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

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

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表MysqL数据库

MysqL -uroot -proot test < area.sqlMysqL数据库

1.1. 区域表的根本 *** 作MysqL数据库

查看 '广州' 的相关信息MysqL数据库

SELECT * FROM area WHERE name liKE '%广州%';+---------+-----------+-----------+------+----------+-----------+| area_ID | name   | area_code | pID | left_num | right_num |+---------+-----------+-----------+------+----------+-----------+|  2148 | 广州市  | 440100  | 2147 |   2879 |   2904 |+---------+-----------+-----------+------+----------+-----------+

查看 '广州' 所有孩子MysqL数据库

SELECT c.* FROM area AS p,area AS cWHERE 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 |+---------+-----------+-----------+------+----------+-----------+

查看 '广州' 所有孩子 和 深度 并显示层级关系MysqL数据库

SELECT sub_child.area_ID,(COUNT(sub_parent.name) - 1) AS depth,CONCAT(REPEAT(' ',(COUNT(sub_parent.name) - 1)),sub_child.name) AS nameFROM ( 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_parentWHERE sub_child.left_num BETWEEN sub_parent.left_num AND sub_parent.right_numGROUP BY sub_child.area_IDORDER 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 |+---------+-------------+-------+

显示 '广州' 的直系祖先(包含自己)MysqL数据库

SELECT p.* FROM area AS p,area AS cWHERE 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 |+---------+-----------+-----------+------+----------+-----------+

向 '广州' 插入一个地域 '南沙区'MysqL数据库

-- 更新左右值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 areaSELECT NulL,'南沙区','440115',2148,left_num + 1,left_num + 2FROM area WHERE area_ID = 2148; -- 查看是否满意要求SELECT c.* FROM area AS p,area AS cWHERE 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 |+---------+-----------+-----------+------+----------+-----------+

内存溢出PHP培训学院每天发布《MysqL教程MysqL多层级结构-区域表使用树详解》等实战技能,PHP、MysqL、liNUX、APP、Js,CSS全面培养人才。

总结

以上是内存溢出为你收集整理的MYSQL教程MySQL多层级结构-区域表使用树详解全部内容,希望文章能够帮你解决MYSQL教程MySQL多层级结构-区域表使用树详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1153922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存