[pgsql-jp: 38449] Re: 階層問い合わせについて

KIMURA, Meiji kimura804 @ ybb.ne.jp
2007年 5月 25日 (金) 23:25:02 JST


こんばんわ、木村明治@キムラデービーです。

--- kuma <kuma @ fgy.co.jp> wrote:

> お世話になります、熊田です。
> 
> 8.1.x系にcontrib/tablefuncを入れてconnectby()関数で階層問い合わせを行っ
> ています。
> 
> 以下、サンプルの通り環境を作り実行しました。
> -----------------------------------------------------------------------
> CREATE TABLE connectby_tree(keyid text, parent_keyid text, pos int);
> INSERT INTO connectby_tree VALUES('row1',NULL, 0);
> INSERT INTO connectby_tree VALUES('row2','row1', 0);
> INSERT INTO connectby_tree VALUES('row3','row1', 0);
> INSERT INTO connectby_tree VALUES('row4','row2', 1);
> INSERT INTO connectby_tree VALUES('row5','row2', 0);
> INSERT INTO connectby_tree VALUES('row6','row4', 0);
> INSERT INTO connectby_tree VALUES('row7','row3', 0);
> INSERT INTO connectby_tree VALUES('row8','row6', 0);
> INSERT INTO connectby_tree VALUES('row9','row5', 0);
> 
> SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'row1',
> 0, '~')
>  AS t(keyid text, parent_keyid text, level int, branch text);
>  keyid | parent_keyid | level |          branch
> -------+--------------+-------+--------------------------
>  row1  |              |     0 | row1
>  row2  | row1         |     1 | row1~row2
>  row4  | row2         |     2 | row1~row2~row4
>  row6  | row4         |     3 | row1~row2~row4~row6
>  row8  | row6         |     4 | row1~row2~row4~row6~row8
>  row5  | row2         |     2 | row1~row2~row5
>  row9  | row5         |     3 | row1~row2~row5~row9
>  row3  | row1         |     1 | row1~row3
>  row7  | row3         |     2 | row1~row3~row7
> -----------------------------------------------------------------------
> 
> ここで各階層毎にソートを行いたいのですが可能なのでしょうか。
> parent_keyid(親キー)に同じ値を持つrow2,row3などをkeyidやposなどでソー
> トをした結果が取得したいのです。

connectbyの第四引数に"row1"のかわりに、"keyid"や"pos"を指定すればいいんじゃないでしょうか?
試してみてください。

--
キムラデービー代表 木村明治(KIMURA, Meiji)
http://kimuradb.com
[News] 2007/6/5 CodeGearデベロッパーキャンプでBDEセッションやります。
http://dn.codegear.com/jp/article/36304/



pgsql-jp メーリングリストの案内