最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL多層級結(jié)構(gòu)-區(qū)域表使用樹詳解

 更新時間:2016年07月08日 21:59:08   投稿:mdxy-dxy  
前面我們大概介紹了一下樹結(jié)構(gòu)表的基本使用。在我們項目中有好幾塊有用到多層級的概念。下面我們哪大家都比較熟悉的區(qū)域表來做演示

1.1. 前言

前面我們大概介紹了一下樹結(jié)構(gòu)表的基本使用。在我們項目中有好幾塊有用到多層級的概念。下面我們哪大家都比較熟悉的區(qū)域表來做演示。
1.2. 表結(jié)構(gòu)和數(shù)據(jù)

區(qū)域表基本結(jié)構(gòu),可能在你的項目中還有包含其他字段。這邊我只展示我們關(guān)心的字段:

CREATE TABLE `area` (
 `area_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '地區(qū)ID',
 `name` varchar(40) NOT NULL DEFAULT 'unkonw' COMMENT '地區(qū)名稱',
 `area_code` varchar(10) NOT NULL DEFAULT 'unkonw' COMMENT '地區(qū)編碼',
 `pid` int(11) DEFAULT NULL COMMENT '父id',
 `left_num` mediumint(8) unsigned NOT NULL COMMENT '節(jié)點左值',
 `right_num` mediumint(8) unsigned NOT NULL COMMENT '節(jié)點右值',
 PRIMARY KEY (`area_id`),
 KEY `idx$area$pid` (`pid`),
 KEY `idx$area$left_num` (`left_num`),
 KEY `idx$area$right_num` (`right_num`)
)

區(qū)域表數(shù)據(jù): area
導(dǎo)入到test表

mysql -uroot -proot test < area.sql

1.1. 區(qū)域表的基本操作

查看 '廣州' 的相關(guān)信息

SELECT * FROM area WHERE name LIKE '%廣州%';
+---------+-----------+-----------+------+----------+-----------+
| area_id | name   | area_code | pid | left_num | right_num |
+---------+-----------+-----------+------+----------+-----------+
|  2148 | 廣州市  | 440100  | 2147 |   2879 |   2904 |
+---------+-----------+-----------+------+----------+-----------+

查看 '廣州' 所有孩子

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 | 花都區(qū)  | 440114  | 2148 |   2884 |   2885 |
|  2158 | 番禺區(qū)  | 440113  | 2148 |   2886 |   2887 |
|  2157 | 黃埔區(qū)  | 440112  | 2148 |   2888 |   2889 |
|  2156 | 白云區(qū)  | 440111  | 2148 |   2890 |   2891 |
|  2154 | 天河區(qū)  | 440106  | 2148 |   2892 |   2893 |
|  2153 | 海珠區(qū)  | 440105  | 2148 |   2894 |   2895 |
|  2152 | 越秀區(qū)  | 440104  | 2148 |   2896 |   2897 |
|  2151 | 荔灣區(qū)  | 440103  | 2148 |   2898 |   2899 |
|  2150 | 東山區(qū)  | 230406  | 2148 |   2900 |   2901 |
|  2149 | 其它區(qū)  | 440189  | 2148 |   2902 |   2903 |
+---------+-----------+-----------+------+----------+-----------+

查看 '廣州' 所有孩子 和 深度 并顯示層級關(guān)系

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 |  花都區(qū)  |   1 |
|  2158 |  番禺區(qū)  |   1 |
|  2157 |  黃埔區(qū)  |   1 |
|  2156 |  白云區(qū)  |   1 |
|  2154 |  天河區(qū)  |   1 |
|  2153 |  海珠區(qū)  |   1 |
|  2152 |  越秀區(qū)  |   1 |
|  2151 |  荔灣區(qū)  |   1 |
|  2150 |  東山區(qū)  |   1 |
|  2149 |  其它區(qū)  |   1 |
+---------+-------------+-------+

顯示 '廣州' 的直系祖先(包括自己)

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 |
+---------+-----------+-----------+------+----------+-----------+

向 '廣州' 插入一個地區(qū) '南沙區(qū)'

-- 更新左右值
UPDATE area SET left_num = left_num + 2 WHERE left_num > 2879;
UPDATE area SET right_num = right_num + 2 WHERE right_num > 2879;
 
-- 插入 '南沙區(qū)' 信息
INSERT INTO area
SELECT NULL, '南沙區(qū)', '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 | 南沙區(qū)  | 440115  | 2148 |   2880 |   2881 |
|  2161 | 從化市  | 440184  | 2148 |   2882 |   2883 |
|  2160 | 增城市  | 440183  | 2148 |   2884 |   2885 |
|  2159 | 花都區(qū)  | 440114  | 2148 |   2886 |   2887 |
|  2158 | 番禺區(qū)  | 440113  | 2148 |   2888 |   2889 |
|  2157 | 黃埔區(qū)  | 440112  | 2148 |   2890 |   2891 |
|  2156 | 白云區(qū)  | 440111  | 2148 |   2892 |   2893 |
|  2154 | 天河區(qū)  | 440106  | 2148 |   2894 |   2895 |
|  2153 | 海珠區(qū)  | 440105  | 2148 |   2896 |   2897 |
|  2152 | 越秀區(qū)  | 440104  | 2148 |   2898 |   2899 |
|  2151 | 荔灣區(qū)  | 440103  | 2148 |   2900 |   2901 |
|  2150 | 東山區(qū)  | 230406  | 2148 |   2902 |   2903 |
|  2149 | 其它區(qū)  | 440189  | 2148 |   2904 |   2905 |
+---------+-----------+-----------+------+----------+-----------+

相關(guān)文章

  • MySQL詳細(xì)講解多表關(guān)聯(lián)查詢

    MySQL詳細(xì)講解多表關(guān)聯(lián)查詢

    在數(shù)據(jù)庫的設(shè)計中, 我們通常都是會有很多張表 , 通過表與表之間的關(guān)系建立我們想要的數(shù)據(jù)關(guān)系, 所以在多張表的前提下, 多表的關(guān)聯(lián)查詢就尤為重要
    2022-04-04
  • mysql binlog占用大量磁盤空間的解決方法

    mysql binlog占用大量磁盤空間的解決方法

    MySQL binlog(Binary Log)是MySQL數(shù)據(jù)庫的一種重要組件,用于記錄所有對數(shù)據(jù)庫的更改操作,當(dāng)MySQL服務(wù)器接收到對數(shù)據(jù)庫的寫入請求并成功執(zhí)行后,這些更改會被寫入binlog,本文給大家介紹了mysql binlog占用大量磁盤空間的解決方法,需要的朋友可以參考下
    2024-06-06
  • mysql外鍵(Foreign Key)介紹和創(chuàng)建外鍵的方法

    mysql外鍵(Foreign Key)介紹和創(chuàng)建外鍵的方法

    這篇文章主要介紹了mysql外鍵(Foreign Key)命令和添加外鍵方法,需要的朋友可以參考下
    2014-02-02
  • MySQL約束之默認(rèn)約束default與零填充約束zerofill

    MySQL約束之默認(rèn)約束default與零填充約束zerofill

    這篇文章主要介紹了MySQL約束之默認(rèn)約束default與零填充約束zerofill,MySQL?默認(rèn)值約束用來指定某列的默認(rèn)值。更多相關(guān)資料需要的朋友可以參考一下
    2022-07-07
  • MySQL Json類型字段IN查詢分組優(yōu)化

    MySQL Json類型字段IN查詢分組優(yōu)化

    這篇文章主要為大家介紹了MySQL Json類型字段IN查詢分組優(yōu)化,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 詳解MySQL查詢時區(qū)分字符串中字母大小寫的方法

    詳解MySQL查詢時區(qū)分字符串中字母大小寫的方法

    MySQL默認(rèn)是不區(qū)分大小寫的,這個涉及到collate字符集與校驗規(guī)則方面的知識,下面會講到,這里我們就來詳解MySQL查詢時區(qū)分字符串中字母大小寫的方法.
    2016-05-05
  • 如何用SQL命令查看Mysql數(shù)據(jù)庫大小

    如何用SQL命令查看Mysql數(shù)據(jù)庫大小

    本篇文章是對用SQL命令查看Mysql數(shù)據(jù)庫大小的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 使用MySQL從JSON字符串提取數(shù)據(jù)的方法詳解

    使用MySQL從JSON字符串提取數(shù)據(jù)的方法詳解

    在現(xiàn)代數(shù)據(jù)庫管理中,JSON 格式因其靈活性而廣泛使用,然而,當(dāng)數(shù)據(jù)存儲在 JSON 中時,我們經(jīng)常需要將其轉(zhuǎn)換為更易于處理的格式,本篇文章將通過一個具體的 SQL 查詢示例,展示如何從存儲在 MySQL 中的 JSON 字符串提取數(shù)據(jù)并重新格式化,需要的朋友可以參考下
    2024-10-10
  • mysql 8.0.20 winx64.zip壓縮版安裝配置方法圖文教程

    mysql 8.0.20 winx64.zip壓縮版安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.20 winx64.zip壓縮版安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • SQL聯(lián)合查詢inner join、outer join和cross join的區(qū)別詳解

    SQL聯(lián)合查詢inner join、outer join和cross join的區(qū)別詳解

    今天小編就為大家分享一篇關(guān)于SQL聯(lián)合查詢inner join、outer join和cross join的區(qū)別詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03

最新評論

东兰县| 宁陵县| 旌德县| 高尔夫| 福贡县| 宣恩县| 军事| 涪陵区| 大洼县| 海原县| 徐闻县| 汕头市| 太康县| 大港区| 彭州市| 鄂尔多斯市| 桑日县| 宜阳县| 大方县| 通化县| 江永县| 甘谷县| 南投县| 辉南县| 平利县| 象山县| 濮阳市| 策勒县| 韶山市| 浮山县| 元氏县| 隆化县| 南郑县| 和田县| 舟曲县| 恭城| 宣武区| 彰武县| 富蕴县| 民丰县| 垫江县|