zoukankan      html  css  js  c++  java
  • Mysql嵌套集合模型【省份城市示例】 DWZ富客户端

    父分类包围了其子分类。在数据表中,我们通过使用表示节点的嵌套关系的左值(left value)和右值(right value)来表现嵌套集合模型
    中数据的分层特性。我们使用了lft和rgt来代替left和right,是因为在MySQL中left和right是保留字。
    http://dev.mysql.com/doc/mysql/en/reserved-words.html,有一份详细的MySQL保留字清单。

    那么,我们怎样决定左值和右值呢?我们从外层节点的最左侧开始,从左到右编号:

    CREATE TABLE `region` (
    `id`
    int(11) NOT NULL auto_increment,
    `name`
    varchar(30) default NULL,
    `parent_id`
    int(11) default NULL,
    `lft`
    int(10) unsigned default NULL,
    `rgt`
    int(10) unsigned default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE
    =InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

    insert into `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (1,'中国',0,1,20);
    insert into `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (2,'北京',1,2,5);
    insert into `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (3,'北京市',2,3,4);
    insert into `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (4,'上海',1,6,9);
    insert into `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (5,'上海市',4,7,8);
    insert into `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (6,'浙江',1,10,19);
    insert into `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (7,'金华市',6,15,16);
    insert into `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (8,'温州市',6,17,18);
    insert into `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (9,'杭州市',6,11,12);
    insert into `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (10,'宁波市',6,13,14);

    查询全部节点分成展示:

    SELECT CONCAT(REPEAT(' ', COUNT(parent.id)-1), node.name) AS name, node.id,node.lft,node.rgt, COUNT(parent.id)
    FROM region AS node, region AS parent
    where node.lft BETWEEN parent.lft AND parent.rgt
    group by node.id
    ORDER BY node.lft;

    查询节点路径:

    select parent.name, parent.id from region as node, region as parent
    where
    node.lft BETWEEN parent.lft and parent.rgt and node.name='金华市';

    参考

    http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

  • 相关阅读:
    javac 小记
    安全专家的工具箱
    MyBatis 缓存机制(十三)
    SpringMVC 环境搭建
    MyBatis 模糊查询的 4 种实现方式
    MyBatis 项目开发中是基于 XML 还是注解?
    MyBatis 动态 SQL 语句中出现 '<' 的问题
    数据库设计的三大范式
    mybatis 同时使用 XML 和注解
    数据库事务
  • 原文地址:https://www.cnblogs.com/dwzjs/p/2034139.html
Copyright © 2011-2022 走看看