• Mysql嵌套集合模型【省份城市示例】


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

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

    复制代码
    CREATETABLE `region` ( `id` int(11) NOTNULL auto_increment, `name` varchar(30) defaultNULL, `parent_id` int(11) defaultNULL, `lft` int(10) unsigned defaultNULL, `rgt` int(10) unsigned defaultNULL, PRIMARYKEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11DEFAULT CHARSET=utf8;
    insertinto `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (1,'中国',0,1,20); insertinto `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (2,'北京',1,2,5); insertinto `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (3,'北京市',2,3,4); insertinto `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (4,'上海',1,6,9); insertinto `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (5,'上海市',4,7,8); insertinto `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (6,'浙江',1,10,19); insertinto `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (7,'金华市',6,15,16); insertinto `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (8,'温州市',6,17,18); insertinto `region`(`id`,`name`,`parent_id`,`lft`,`rgt`) values (9,'杭州市',6,11,12); insertinto `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 groupby node.id ORDERBY 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

  • 相关阅读:
    PHP中的数据库一、MySQL优化策略综述
    LINUX下的PHP
    JS实现别踩白块小游戏
    网页实时聊天之js和jQuery实现ajax长轮询
    PHP用mb_string函数库处理与windows相关中文字符
    PHP正则中的捕获组与非捕获组
    PHP递归创建多级目录(一道面试题的解题过程)
    PHP模拟发送POST请求之五curl基本使用和多线程优化
    PHP模拟发送POST请求之四、加强file_get_contents()发送POST请求
    PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
  • 原文地址:https://www.cnblogs.com/j-ui/p/3219550.html
Copyright © 2020-2023  润新知