You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite树形表排序问题:按父节点pos排序data1至data8节点

解决SQLite树形节点排序问题

原查询的问题

  1. IN子句语法错误:你把多个ID放在了一个字符串里("15,16,17,18,19,20,21,22"),SQL会将其视为单个字符串值匹配,无法正确筛选目标节点。正确写法是将每个ID作为独立数值传入IN子句。
  2. 排序逻辑不符合需求:仅按当前节点的pos排序无法体现树形结构的层级顺序,需要基于父节点、祖父节点的pos进行层级排序。

正确的SQL查询语句

SELECT t.nm
FROM tester t
-- 关联父节点,获取父节点的pos
JOIN tester parent ON t.pid = parent.id
-- 关联祖父节点,获取祖父节点的pos(对应一级分类的pos)
JOIN tester grandparent ON parent.pid = grandparent.id
WHERE t.id IN (15, 16, 17, 18, 19, 20, 21, 22)
-- 按祖父节点pos、父节点pos、自身pos依次排序
ORDER BY grandparent.pos ASC, parent.pos ASC, t.pos ASC;

结果验证

执行上述查询后,输出结果将与你的期望完全一致:

data5
data6
data3
data4
data7
data8
data1
data2

排序逻辑说明

  • 首先按**祖父节点(一级分类)的pos**排序:cat1(pos=0)下的子节点整体排在cat2(pos=1)下的子节点之前;
  • 同一祖父节点下,按**父节点(二级分类)的pos**排序:subcat3(pos=0)的子节点排在subcat2(pos=1)的子节点之前,subcat4(pos=0)的子节点排在subcat1(pos=1)的子节点之前;
  • 同一父节点下,按**自身节点的pos**排序,保证同分类下的data节点顺序正确。

内容的提问来源于stack exchange,提问作者user1807378

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 02:20:20