为了账号安全,请及时绑定邮箱和手机立即绑定

【MySQL】-无限极分类表设计与查询

标签:
MySQL

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 01234

插入数据示例:

这里写图片描述

如何高效查询

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

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;123

这样我们便高效的查到了任一子类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 sON s.parent_id=p.type_id;123

这样我们可以高效查到父类下所有的子类名称。
这里写图片描述

原文出处

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消