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 | +------+--------+----------+
該方法的優點是,它可以非常高效地查詢樹狀結構數據,并且可以很容易地擴展到查詢更多層級的層級。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END