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 | 私たち | | | へ