SQLite树形表排序问题:按父节点pos排序data1至data8节点
解决SQLite树形节点排序问题
原查询的问题
- IN子句语法错误:你把多个ID放在了一个字符串里(
"15,16,17,18,19,20,21,22"),SQL会将其视为单个字符串值匹配,无法正确筛选目标节点。正确写法是将每个ID作为独立数值传入IN子句。 - 排序逻辑不符合需求:仅按当前节点的
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
相关产品推荐
相关产品推荐

