What?

举个简单的例子,我们设计购物商城之类的网站的时候一般商品都会有一级分类二级分类甚至三级分类或者再细分,如果按照传统思维我们可能会为每个级别的类别设置一张分类表然后再用外键去关联,虽然这样保证了没有冗余,但是我们完全没有必要设置这么多表,更何况商品类可以是无限细分的,我们不能因此而创建无数张表,最最重要的是这样多表连接查询时候会造成效率低下的问题,不利于性能的提升。

这个时候我们如何只设置一张类别表而且保证没有冗余呢?接下来揭开无限极分类表设计的面纱。


How?

至少包含三个字段,自身id,自身名,父级id.

先创建一张简单的表

CREATE TABLE tdb_goods_types(<br>
type_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,<br>
type_name VARCHAR(20) NOT NULL,<br>
parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0

插入数据示例:

如何高效查询

秘密武器:做自身连接起别名,然后利用左右连接来查询
自身连接为何物?同一个数据表对自身进行连接。注意一定要起别名!!

1.左连接–以右表为子表

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;

这样我们便高效的查到了任一子类id及其关联的父类id.

2.右连接–以右表为父表

SELECT p.type_id,p.type_name,s.type_name
FROM tdb_goods_types AS p LEFT JOIN tdb_goods_type AS s
ON s.parent_id=p.type_id;

这样我们可以高效查到父类下所有的子类名称。

【MySQL】-无限级分类表设计与查询相关推荐

  1. MYSQL无限级分类表设计及自我连接

    我们有这样一个需求: 做一个城市联动,比如说贵州省,省下面有众多市,市下面有众多区县,区县下面有众多镇,如果用多张表来存储,必然是能够简单的实现联动效果,但是多表的联合查询必然会影响到一些效率,此时可 ...

  2. MySQL之无限级分类表设计

    首先查找一下goods_cates表和table_goods_brands数据表 分别使用命令: root@localhost test>show columns from goods_cate ...

  3. mysql/mariadb 进阶知识之表设计和查询

    进阶知识之表设计和查询 学生信息.成绩.课程数据表,提取码:iqub 评论及回复数据表,提取码:hdr7 一.表设计之数据类型选择 1.1.表设计步骤 第一步,确定大类型:数字.字符串.日期等级等: ...

  4. mysql 列换行 表设计 设计_今天来讲一下怎么利用MySql进行库表设计

    今天来讲一下怎么利用MySql进行库表设计 1 引擎选择 在 mysql 5.1 中,引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运新的 mysql 服务器中.使用 mysql 插件式存 ...

  5. MySQL之库表设计篇:一到五范式、BC范式与反范式详解

    引言 MySQL的库表设计,在很多时候我们都是率性而为,往往在前期的设计中考虑并不全面,同时对于库表结构的划分也并不明确,所以很多时候在开发过程中,代码敲着敲着会去重构某张表结构,甚至大面积重构多张表 ...

  6. MySQL对数据表进行分组查询(GROUP BY)

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  7. mysql 优惠卷表设计_这些年MySQL表设计踩过的坑!

    本文首发于个人微信公众号<andyqian>,期待你的关注! 前言 有朋友在后台留言.希望我能说说我在数据库表设计时踩过的坑.那么,我们今天就来聊聊我在数据库表设计时踩过的坑,以及现在对数 ...

  8. mysql多张表join_mysql 连接查询(多表查询)+子查询-初学教程 3【重点】

    第一部分:https://zhuanlan.zhihu.com/p/63217422 第二部分:https://zhuanlan.zhihu.com/p/64153448 Day3 九.连接查询 1. ...

  9. MYSQL优化派生表(子查询)在From语句中的

    Mysql 在5.6.3中,优化器更有效率地处理派生表(在from语句中的子查询): 优化器推迟物化子查询在from语句中的子查询,知道子查询的内容在查询正真执行需要时,才开始物化.这一举措提高了性能 ...

最新文章

  1. 数据库中的select 1,select count(1),order by 1
  2. MAC OS 10.11.1虚拟机免费下载已安装Xcode7图片后有下载地址
  3. 49. Leetcode 117. 填充每个节点的下一个右侧节点指针 II (二叉树-二叉树遍历)
  4. 预训练图像处理Transformer:刷榜多项底层视觉任务
  5. vsftpd默认用户名/密码
  6. 飞控计算机的作用,用于波音777飞机的主要飞控计算机
  7. 我的世界java什么时候打折_十周年特别纪念!微软《我的世界》游戏全平台最高折扣50% - IT之家...
  8. 传统汽车被“智能”打败?且看汽车进化的黄金十年!
  9. 程序员拯救乐坛?OpenAI 用“逆天”GPT2.0 搞了个 AI 音乐生成器
  10. I/O重定向的原理和实现
  11. 手机端网站底部悬浮 广告代码 代关闭_莱阳附近外贸网站建设公司-鸿强传媒
  12. 儿歌-宝宝学唱儿歌 ios版
  13. php 获取顶级域名、一级域名
  14. 装上WPS后导入Excel 的代码出错
  15. 【邮箱】Foxmail中如何登陆网易邮箱?
  16. fusioncharts 嵌套饼图_【Tableau 图表】你是不是真的需要一个跑道图呢?
  17. 学会读懂traceback,处理Python异常
  18. python操作pdf与图片相互转换
  19. 解决迅雷下载外网文件速度为0
  20. android studio真机测试不生成apk,Android应用开发Android Studio编译出来的APK无法安装如何解决?...

热门文章

  1. 适用于 SOLIDWORKS 的最佳 CPU、 显卡和内存
  2. Android: How to Capture Screen in Gingerbread(2.3中实现截屏)(续)
  3. 11贴图控件-09图片背景日历-imagecalendar
  4. vue自定义日历组件
  5. 【系统设计】会议室预定系统房间预定系统设计
  6. 为什么要使用Embedding Layers
  7. MallBook深度丨分账系统在汽车服务业务下的应用
  8. 【Linux】【Ubuntu 】Ubuntu 下安装 png++
  9. ESP8266局域网智能家居 路由器下作服务器模式串口透传 无线通信控制 arduino uno示例 模板参考
  10. “玲珑杯”ACM比赛 Round #18 ABC题解