ENV : postgresql-8.4
カテゴリ ツリーを作成しようとしています。基本的に、次のような最終出力を期待しています:
種別名 カテゴリパス リーフカテゴリ例:
デジタルカメラ 電化製品 ::: デジタルカメラ 真実
テーブル構造は
CREATE TABLE カテゴリ (
ID SERIAL PRIMARY KEY,
カテゴリ ID bigint、
カテゴリ親 ID bigint、
カテゴリ名テキスト、
状態整数 DEFAULT 0,
言語テキスト、
eysiteid テキスト、
国のテキスト、
控えめなテキスト、
leafcategory ブール値
);
これまでのところ、私はこれを持っていますが、機能していません。どんな助けでも大歓迎です:
WITH RECURSIVE ツリー (CategoryID、CategoryParentID、CategoryName、category_tree、深さ)
なので (
選択する
カテゴリID、
カテゴリ親ID、
種別名、
CategoryName AS カテゴリ_ツリー、
0 AS深度
カテゴリから
WHERE CategoryParentID IS NULL
ユニオンオール
選択する
c.CategoryID、
c.CategoryParentID、
c.CategoryName、
tree.category_tree || ツリー.カテゴリツリー || '/' || c.CategoryName AS カテゴリ_ツリー、
depth+1 AS の深さ
FROM ツリー
JOIN カテゴリ c ON (tree.category_tree = c.CategoryParentID)
)
SELECT * FROM ツリー ORDER BY category_tree;
データベースからのサンプル
cat=> カテゴリから * を選択;
ID | カテゴリ ID | カテゴリ親 ID | カテゴリ名 | ステータス | 言語 | エイサイトイド| 国 | 気まぐれ | リーフカテゴリ
-------+------------+------------------+---------- ----------------------+--------+------+----------- -----------+--------+--------------
1 | -1 | 0 | ルート | ルート 1 | ja | 0 | 私たち | | | へ
2 | 20081 | -1 | 骨董品 | 骨董品 1 | ja | 0 | 私たち | | | へ
17 | 1217 | 20081 | プリミティブ | 0 | ja | 0 | 私たち | | | t
23 | 22608 | 20081 | 複製骨董品 | 0 | ja | 0 | 私たち | | | t
24 | 12 | 20081 | その他 | 0 | ja | 0 | 私たち | | | t
25 | 550 | -1 | アート | アート | 1 | ja | 0 | 私たち | | | へ
29 | 2984 | -1 | 赤ちゃん | 1 | ja | 0 | 私たち | | | へ