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 树状结构数据的层级查询?的详细内容,更多请关注慧达安全导航其它相关文章!

点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部