mysql 查询树状结构数据的优化
要查询树状结构数据的层级,通常需要使用递归或闭包表等方法。
闭包表
建议使用闭包表来优化此查询,其结构如下:
create table tree( self int, parent int, distance int );
登录后复制
插入示例数据并按 self 分类合并形成树:
from_database = [ ["鸡肉", "鸡肉", 0], ["鸡肉", "肉类", 1], ["鸡肉", "食物", 2], ["肉类", "肉类", 0], ["肉类", "食物", 1], ] from itertools import groupby root = {} for _, path in groupby(from_database, key=lambda x: x[0]): path = sorted(list(path), key=lambda x: -x[2]) node = root for _, nodename, _ in path: node = node.setdefault(nodename, {}) print(root) # {'食物': {'肉类': {'鸡肉': {}}}}
登录后复制
查询
使用 like 查询带肉的字段,结果如下:
select * from tree where self like '%肉%';
登录后复制
+------+---------+----------+ | self | parent | distance | +------+---------+----------+ | 肉类 | 肉类 | 0 | | 肉类 | 食物 | 1 | | 鸡肉 | 鸡肉 | 0 | | 鸡肉 | 肉类 | 1 | | 鸡肉 | 食物 | 2 | +------+--------+----------+
登录后复制
该方法的优点是,它可以非常高效地查询树状结构数据,并且可以很容易地扩展到查询更多层级的层级。
以上就是如何使用闭包表优化 MySQL 树状结构数据的层级查询?的详细内容,更多请关注抖狐科技其它相关文章!
-
优酷会员怎么与他人共享
优酷会员可以通过开通家庭会员、添加家庭成员和设置观影权限来共享:1. 开通家庭会员;2. 添加家庭成员;3. 设置观影权限。家庭成员可以共享主账号购买的 vip 内容,但不能购买或赠送 vip 会员。...
-
绿色地狱纤维有什么用 纤维作用及获取方式详细介绍
绿色地狱纤维有什么用?这个绿色地狱是一款非常优秀的角色扮演类手游,大家想要在游戏中成功生存下去,我们也是需要借助各种各样的道具,其中纤维就是制作各种道具的一种重要材料,很多小伙伴也都还不知道这个绿色地...
-
怎样取消爱奇艺会员自动续费_如何取消爱奇艺会员自动续费
爱奇艺会员自动续费取消步骤:登录账号后依次进入会员中心、管理会员、取消自动续费并确认即可。取消后会员权益持续至到期日,到期日后须手动续费。如何取消爱奇艺会员自动续费 步骤: 1. 登录爱奇艺账号 使用...
-
python3.9.2下载教程
python 3.9.2 下载步骤:访问官网下载页面:https://www.python.org/downloads/选择操作系统,下载对应安装程序安装 python,按照提示完成操作Python...
-
在支付宝购买芒果tv怎么关闭自动续费
关闭支付宝芒果tv自动续费的方法如下:打开支付宝,进入“我的”页面,点击“设置”;选择“支付设置”;找到“免密支付/自动扣款”,并点击“管理”;在“正在扣款的商家”列表中,找到“芒果tv”,并点击“解...