Re: using a self referencing table

From: andrew <TheDog(at)TheSoftwareSmith(dot)Com(dot)Au>
To: drfrog(at)smartt(dot)com, pgsql-sql(at)postgresql(dot)org
Subject: Re: using a self referencing table
Date: 2000-07-19 00:19:03
Message-ID: 3974F3F7.1AABD0C7@TheSoftwareSmith.Com.Au
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

drfrog(at)smartt(dot)com wrote:

> i have a table with this structure
>
> name (varchar)|category id (int4)|parent category id (int4)|leaf node
> (bool)
>
> im trying to make a perl script that should tree the info
>
> parent cat
> subcat
> subcat2
> subcat2
> subcat
> subcat2
> ...
>
> but im having troubles wrapping my head around this
>
> im using the Pg modules to access postgres
>
> if anyone has any suggestions please lemme know thanks!

The trick is to be able to sort all the elements of the hierarchy so
that they come out in the right order, that is, grouped by parent, and
then indent them.

You can do this with two extra redundant fields, clevel int and csort
text. Every time you insert a node in the tree, include the calculated
level of the node (i.e. clevel = parent->clevel + 1) and a string which
ensures that the children of a given node are grouped together (i.e.
csort = parent->csort + category id::text). Probably best to left pad
the category id with an appropriate number of zeroes for this
calculation.

When you retrieve the nodes, order by csort, and convert clevel into the
appropriate number of indents.

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Thomas Lockhart 2000-07-19 02:12:35 Re: Median
Previous Message Peter Eisentraut 2000-07-18 21:45:39 Re: Database authentication and configuration