Re: Stuck Up In My Own Category Tree

Поиск
Список
Период
Сортировка
От jasmin.dizdarevic@gmail.com
Тема Re: Stuck Up In My Own Category Tree
Дата
Msg-id 176808897-1313080199-cardhu_decombobulator_blackberry.rim.net-1047677465-@b3.c13.bise7.blackberry
обсуждение исходный текст
Ответ на Re: Stuck Up In My Own Category Tree  (Samuel Gendler <sgendler@ideasculptor.com>)
Список pgsql-sql
I will have do something like this soon. Look at ltree. I don't have much experience with it yet, but it seems that this ext addresses those issues.
Regards

A1 präsentiert BlackBerry® von Vodafone


From: Samuel Gendler <sgendler@ideasculptor.com>
Sender: pgsql-sql-owner@postgresql.org
Date: Thu, 11 Aug 2011 09:24:41 -0700
To: Don Parris<parrisdc@gmail.com>
Cc: <pgsql-sql@postgresql.org>
Subject: Re: [SQL] Stuck Up In My Own Category Tree



On Thu, Aug 11, 2011 at 8:39 AM, Don Parris <parrisdc@gmail.com> wrote:
Hi all,

Note: I'm happy to read howtos, tutorials, archived messages - I just haven't found anything that addresses this yet.  I found a related topic on the novice list, but my post got no response there.  I've been struggling with this for about a week now and need to figure out a solution.  Heck, this may not even be the best approach to hierarchical structures, but it sure seemed reasonable when I first read up on the subject.  Anyway...

I created a category table like so (I got the idea from a website somewhere that used it in a different way, and did not discuss much about addressing what I want to accomplish):
cat_id(serial)  |  cat_name(varchar)  |  parent_id(int)  |  lineage(varchar)  |  deep(int)
1                         root_cat_a                 Null                   1                          1
2                         sub_cat_1                 1                       1-2                       2
3                         sub_sub_cat_a          2                      1-2-3                     3

I use this to categorize transactions, and use the most appropriate subcategory for any given transation item in a table called trans_details.  I can easily show transaction amounts by sub-category  (SELECT cat_name, sum(amount) AS "amount" FROM category, trans_details WHERE category_cat_id = trans_details.cat_id):

cat_name                             |    amount
Transportation: Auto: Fuel     |      $100
Transportation: Auto: Maint    |      $150
Transportation: Fares: Bus    |      $40

but what I cannot figure out is how to create a summary where I show
cat_name                    |    amount
Transportation: Auto     |      $250

or, what I *really* want:
cat_name            |    amount
Transportation     |      $290


Can anyone help me work through this?  Frankly, I'm not even sure where to begin to solve the problem.  I have been trying the WITH RECURSIVE feature, but I do not understand very well how to apply it.  The example query I have brings up an empty result set and I don't have a clue how I could modify it to make it work.  I'm not even sure it's the best method, but it seems like a reasonable approach.  I thought about using regexp to try and match the initial part of the lineage to the category_id of the parents, something like:
WHERE c1.category_id = regexp_matches(c2.lineage, 'nnn-'), but lineage is a text type column, rather than an int, and would need to be cast.

One of the problems I encounter is that a root category with no sub-categories (naturally) won't show up in the category_id = parent_id matches, since such a category has no children.



That link appears to answer all of your potential questions - how to render the hierarchy, how to find all children of a node, etc.  


В списке pgsql-sql по дате отправления:

Предыдущее
От: Samuel Gendler
Дата:
Сообщение: Re: Stuck Up In My Own Category Tree
Следующее
От: "Edward W. Rouse"
Дата:
Сообщение: Re: Stuck Up In My Own Category Tree