MySql:按路径排序(字符串)

时间:2015-06-18 14:00:07

标签: mysql adjacency-list

我需要按照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进行排序时:

enter image description here

16有1作为第一个数字,然后是 / 1/2 / 类别中的第一行

可以有这个吗?:

enter image description here

1 个答案:

答案 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)

您可以继续使用此字符串中可能包含的部分。