zoukankan      html  css  js  c++  java
  • 无限级分类表设计

    mysql> CREATE TABLE tdb_goods_types(
    -> type_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    -> type_name VARCHAR(20) NOT NULL,
    -> parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0
    -> );
    Query OK, 0 rows affected (0.16 sec)

    mysql>
    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('家用电器',DEFAULT
    Query OK, 1 row affected (0.04 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑、办公',DEF
    );
    Query OK, 1 row affected (0.04 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('大家电',1);
    Query OK, 1 row affected (0.04 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('生活电器',1);
    Query OK, 1 row affected (0.05 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('平板电视',3);
    Query OK, 1 row affected (0.04 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('空调',3);
    Query OK, 1 row affected (0.05 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('电风扇',4);
    Query OK, 1 row affected (0.05 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('饮水机',4);
    Query OK, 1 row affected (0.05 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑整机',2);
    Query OK, 1 row affected (0.04 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑配件',2);
    Query OK, 1 row affected (0.06 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('笔记本',9);
    Query OK, 1 row affected (0.04 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('超级本',9);
    Query OK, 1 row affected (0.04 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('游戏本',9);
    Query OK, 1 row affected (0.05 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('CPU',10);
    Query OK, 1 row affected (0.04 sec)

    mysql> INSERT tdb_goods_types(type_name,parent_id) VALUES('主机',10);
    Query OK, 1 row affected (0.06 sec)

    mysql> SHOW COLUMNS FROM tdb_goods_types;  #查看数据表的结构
    +-----------+----------------------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +-----------+----------------------+------+-----+---------+----------------+
    | type_id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
    | type_name | varchar(20) | NO | | NULL | |
    | parent_id | smallint(5) unsigned | NO | | 0 | |
    +-----------+----------------------+------+-----+---------+----------------+

    mysql> SELECT * FROM tdb_goods_types;  #查看插入的记录
    +---------+-----------  -+- --- - -----+
    | type_id | type_name | parent_id |
    +---------+-----  -------+- ------ - --+
    | 1         | 家用电器      | 0             |
    | 2         | 电脑、办公   | 0             |
    | 3         | 大家电         | 1             |
    | 4         | 生活电器      | 1             |  
    | 6         | 空调 | 3 |
    | 7 | 电风扇 | 4 |
    | 8 | 饮水机 | 4 |
    | 9 | 电脑整机 | 2 |
    | 10 | 电脑配件 | 2 |
    | 11 | 笔记本 | 9 |
    | 12 | 超级本 | 9 |
    | 13 | 游戏本 | 9 |
    | 14 | CPU | 10 |
    | 15 | 主机 | 10 |
    +---------+------------+-----------+
    15 rows in set (0.03 sec

    自身连接:同一个数据表对其自身进行连接(想象左边是父表,右边是子表,参照物为子类)

    mysql> SELECT s.type_id,s.type_name, p.type_name FROM tdb_goods_types AS s LEFT
    JOIN tdb_goods_types AS p ON s.parent_id=p.type_id;
    +---------+------------+------------+
    | type_id | type_name | type_name |
    +---------+------------+------------+
    | 1 | 家用电器 | NULL |
    | 2 | 电脑、办公 | NULL |
    | 3 | 大家电 | 家用电器 |
    | 4 | 生活电器 | 家用电器 |
    | 5 | 平板电视 | 大家电 |
    | 6 | 空调 | 大家电 |
    | 7 | 电风扇 | 生活电器 |
    | 8 | 饮水机 | 生活电器 |
    | 9 | 电脑整机 | 电脑、办公 |
    | 10 | 电脑配件 | 电脑、办公 |
    | 11 | 笔记本 | 电脑整机 |
    | 12 | 超级本 | 电脑整机 |
    | 13 | 游戏本 | 电脑整机 |
    | 14 | CPU | 电脑配件 |
    | 15 | 主机 | 电脑配件 |
    +---------+------------+------------+
    15 rows in set (0.00 sec)

    同一个数据表对其自身进行连接(想象左边是子表,右边是父表,参照物为父类)

    mysql> SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS P LEFT
    JOIN tdb_goods_types AS s ON s.parent_id=p.type_id;
    +---------+------------+-----------+
    | type_id | type_name | type_name |
    +---------+------------+-----------+
    | 1 | 家用电器 | 大家电 |
    | 1 | 家用电器 | 生活电器 |
    | 2 | 电脑、办公 | 电脑整机 |
    | 2 | 电脑、办公 | 电脑配件 |
    | 3 | 大家电 | 平板电视 |
    | 3 | 大家电 | 空调 |
    | 4 | 生活电器 | 电风扇 |
    | 4 | 生活电器 | 饮水机 |
    | 5 | 平板电视 | NULL |
    | 6 | 空调 | NULL |
    | 7 | 电风扇 | NULL |
    | 8 | 饮水机 | NULL |
    | 9 | 电脑整机 | 笔记本 |
    | 9 | 电脑整机 | 超级本 |
    | 9 | 电脑整机 | 游戏本 |
    | 10 | 电脑配件 | CPU |
    | 10 | 电脑配件 | 主机 |
    | 11 | 笔记本 | NULL |
    | 12 | 超级本 | NULL |
    | 13 | 游戏本 | NULL |
    | 14 | CPU | NULL |
    | 15 | 主机 | NULL |
    +---------+------------+-----------+

    mysql> SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS P LEFT J
    OIN tdb_goods_types AS s ON s.parent_id=p.type_id GROUP BY p.type_name;
    +---------+------------+-----------+
    | type_id | type_name | type_name |
    +---------+------------+-----------+
    | 14 | CPU | NULL |
    | 15 | 主机 | NULL |
    | 3 | 大家电 | 平板电视 |
    | 1 | 家用电器 | 大家电 |
    | 5 | 平板电视 | NULL |
    | 13 | 游戏本 | NULL |
    | 4 | 生活电器 | 电风扇 |
    | 2 | 电脑、办公 | 电脑整机 |
    | 9 | 电脑整机 | 笔记本 |
    | 10 | 电脑配件 | CPU |
    | 7 | 电风扇 | NULL |
    | 6 | 空调 | NULL |
    | 11 | 笔记本 | NULL |
    | 12 | 超级本 | NULL |
    | 8 | 饮水机 | NULL |
    +---------+------------+-----------+

    mysql> SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS P LEF
    OIN tdb_goods_types AS s ON s.parent_id=p.type_id GROUP BY p.type_name ORDER
    p.type_id;
    +---------+------------+-----------+
    | type_id | type_name | type_name |
    +---------+------------+-----------+
    | 1 | 家用电器 | 大家电 |
    | 2 | 电脑、办公 | 电脑整机 |
    | 3 | 大家电 | 平板电视 |
    | 4 | 生活电器 | 电风扇 |
    | 5 | 平板电视 | NULL |
    | 6 | 空调 | NULL |
    | 7 | 电风扇 | NULL |
    | 8 | 饮水机 | NULL |
    | 9 | 电脑整机 | 笔记本 |
    | 10 | 电脑配件 | CPU |
    | 11 | 笔记本 | NULL |
    | 12 | 超级本 | NULL |
    | 13 | 游戏本 | NULL |
    | 14 | CPU | NULL |
    | 15 | 主机 | NULL |
    +---------+------------+-----------+

    mysql> SELECT p.type_id,p.type_name,count(s.type_name) AS child_count FROM tdb_g
    oods_types AS P LEFT JOIN tdb_goods_types AS s ON s.parent_id=p.type_id GROUP BY
    p.type_name ORDER BY p.type_id;
    +---------+------------+-------------+
    | type_id | type_name | child_count |
    +---------+------------+-------------+
    | 1 | 家用电器 | 2 |
    | 2 | 电脑、办公 | 2 |
    | 3 | 大家电 | 2 |
    | 4 | 生活电器 | 2 |
    | 5 | 平板电视 | 0 |
    | 6 | 空调 | 0 |
    | 7 | 电风扇 | 0 |
    | 8 | 饮水机 | 0 |
    | 9 | 电脑整机 | 3 |
    | 10 | 电脑配件 | 2 |
    | 11 | 笔记本 | 0 |
    | 12 | 超级本 | 0 |
    | 13 | 游戏本 | 0 |
    | 14 | CPU | 0 |
    | 15 | 主机 | 0 |
    +---------+------------+-------------+

  • 相关阅读:
    Structured streaming
    streaming窗口操作
    scala伴生对象,apply()及单例
    storm集成kafka
    solr简易安装配置
    拦路雨偏似雪花,饮泣的你冻吗?--稍瑞,我是关键字过滤器
    我存在,你深深的循环里--从反射看JSON死循环
    ueditor:原谅我这一生不羁放纵爱独特
    或许你不知道(2):LinkedList
    自定义负载均衡
  • 原文地址:https://www.cnblogs.com/toudoubao/p/6628106.html
Copyright © 2011-2022 走看看