0

次のような食品カテゴリが 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_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

このようなもの。code文字の順序と数値の順序が一致しないため、列のような varchar 列での並べ替えはそれほど簡単ではないため、これはparent_idで並べ替えます。

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 に答える