Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按代码排序_Java_Sql_Postgresql_Sorting - Fatal编程技术网

Java 按代码排序

Java 按代码排序,java,sql,postgresql,sorting,Java,Sql,Postgresql,Sorting,我有db中的食品类别,如: category_id | parent_id | code | name -------------+-----------+--------+---------------------------------- 1 | | | root 2 | 1 | 1 | vegetables

我有db中的食品类别,如:

 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
类型是字符变化的,我正在使用PostgreSQL

Postgres可以执行分层/递归查询,允许您实际将数据视为树结构。有一个很好的解释。事实上,这里选择的示例与您想要做的非常接近。

类似的内容。这是按父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排序。为什么会这样?为什么不能在查询级别本身进行一次排序?太好了!我只能说:)非常感谢