Java 按代码排序
我有db中的食品类别,如:Java 按代码排序,java,sql,postgresql,sorting,Java,Sql,Postgresql,Sorting,我有db中的食品类别,如: category_id | parent_id | code | name -------------+-----------+--------+---------------------------------- 1 | | | root 2 | 1 | 1 | vegetables
category_id | parent_id | code | name
-------------+-----------+--------+----------------------------------
1 | | | root
2 | 1 | 1 | vegetables
11 | 1 | 10 | seeds
54 | 11 | 10.1 | sunflower seeds
12 | 1 | 11 | sugar and candy
22 | 2 | 1.1 | frozen vegetables
我想在查询中通过code
对其排序,或者通过编程使用parent\u id(在映射后的POJO中)对其排序。效果应该是这样的:
1
---1.1
------1.1.1
------1.1.2
------1.1.3
---1.2
2
3
---3.1
...
我已经尝试过按代码排序,但我收到的记录顺序如下:1、10.1.1、11、1.1.1
我应该尝试在查询中或映射时对其进行排序。也许java中已经有用于此目的的接口/其他UTIL
code
类型是字符变化的,我正在使用PostgreSQLPostgres可以执行分层/递归查询,允许您实际将数据视为树结构。有一个很好的解释。事实上,这里选择的示例与您想要做的非常接近。类似的内容。这是按父id排序的,因为在像code
列这样的varchar列上排序并不容易,因为字符排序和数字排序不匹配
with recursive cat_tree as (
select category_id, parent_id, name, array[category_id] as sort, category_id::text as path
from category
where parent_id is null
union all
select c.category_id, c.parent_id, c.name, p.sort||c.category_id, p.path||'.'||c.category_id
from category c
join cat_tree p on p.category_id = c.parent_id
)
select category_id, parent_id, path, name
from cat_tree
order by sort;
SQLFIDLE:您可以粘贴查询吗?对此,查询应该足够了。另外,请澄清“查询中的代码或以编程方式使用父\u id”,是否要按代码或父id排序?代码的数据类型是什么?字符串或数字?必须是一个字符串,因为他将
1.1.1
列为输出之一。@loki通过使用parent\u id排序,我的意思是在Category类的java对象中有一个方法getParent()(基于parent\u id)。我无法理解的是,在查询级别上,您希望按代码排序,但在java级别上按parent\u排序。为什么会这样?为什么不能在查询级别本身进行一次排序?太好了!我只能说:)非常感谢