0

我在数据库中有食物类别,例如:

 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_id(在映射后的 POJO 中)对其进行排序。效果应该是这样的:

1
---1.1
------1.1.1
------1.1.2
------1.1.3
---1.2
2
3
---3.1
...

我已经尝试过ORDER BY code,但收到的记录如下:1、10.1.1、11、1.1.1 我应该尝试在查询中排序还是在映射时对其进行排序。为此目的,java中是否已经存在接口/其他实用程序?

code类型是不同的字符,我正在使用 PostgreSQL

4

2 回答 2

1

像这样的东西。这按 parent_id 排序,因为由于字符排序和数字排序之间的不匹配,对像您的列这样的 varchar 列进行排序code并不容易。

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;

SQLFiddle:http ://sqlfiddle.com/#!12/fab3c/1

于 2013-04-09T07:54:16.547 回答
0

Postgres 可以进行分层/递归查询,使您可以将数据实际视为树结构。本教程对此有很好的解释。实际上,那里选择的示例与您想要做的非常接近。

于 2013-04-09T07:45:19.973 回答