我需要按照adjacency pattern:
按路径排序SELECT e.id_category 'id',
p.tPath
FROM (category c)
LEFT JOIN `category_path` p ON c.id_category = p.id_category
ORDER BY p.tPath, c.id_category ASC
类别的路径保存为TEXT列,问题是当我需要对具有多个一位数的ID进行排序时:
16有1作为第一个数字,然后是 / 1/2 / 类别中的第一行
可以有这个吗?:
答案 0 :(得分:0)
因为您要存储数字,所以最好将数字填零到固定长度。但是,由于多种原因,这可能是不可行的。因此,一种方法是提取组件,将每个组件转换为数字,然后对这些组件进行排序:
order by (case when path like '/%'
then substring_index(substring_index(path, '/', 2), -1) + 0
else -1
end),
(case when path like '/%/%'
then substring_index(substring_index(path, '/', 3), -1) + 0
else -1
end),
(case when path like '/%/%/%'
then substring_index(substring_index(path, '/', 4), -1) + 0
else -1
end)
您可以继续使用此字符串中可能包含的部分。