Thread: Sorting by parent/child relationships

Sorting by parent/child relationships

From
"Eric Ridge"
Date:
This may have been asked/answered a million times already, but what the
heck...

Basically, I have a table that maintains parent<-->child relationships
within itself.  The parent_id field points to the collection_id field.
A parent_id id of -1 means it's a root record (ie, no parent).  Pretty
simple.

Question is, how do I sort a query so that children follow their parent?

I came up with this, and it works, but I'm sure there's a better way:

SELECT *, CASE WHEN parent_id = -1 THEN collection_id||'' WHEN parent_id
!= -1 THEN parent_id||collection_id END as z FROM collection order by z;

Any advice will be greatly appreciated.

thanks!

eric

Re: Sorting by parent/child relationships

From
Jochem van Dieten
Date:
Eric Ridge wrote:

> This may have been asked/answered a million times already, but what the
> heck...
>
> Basically, I have a table that maintains parent<-->child relationships
> within itself.  The parent_id field points to the collection_id field.
> A parent_id id of -1 means it's a root record (ie, no parent).  Pretty
> simple.
>
> Question is, how do I sort a query so that children follow their parent?
>
> I came up with this, and it works, but I'm sure there's a better way:
>
> SELECT *, CASE WHEN parent_id = -1 THEN collection_id||'' WHEN parent_id
> != -1 THEN parent_id||collection_id END as z FROM collection order by z;


Some self join would work best I suppose:

select p.*, c.*
from collection p, collection.c
where c.parent_id = p.collectionid
order by p.collectionid ASC, c.collectionid

Depending on your datset you might need to use an outer join instead.

Jochem


Re: Sorting by parent/child relationships

From
"Eric Ridge"
Date:
> Some self join would work best I suppose:
>
> select p.*, c.*
> from collection p, collection.c
> where c.parent_id = p.collectionid
> order by p.collectionid ASC, c.collectionid
>
> Depending on your datset you might need to use an outer join instead.
>
> Jochem

Thanks Jochem!  This is almost exactly what I needed, and it's much
cleaner than the ugly monster I started with!  My biggest problem was
that parent rows had a parent_id of -1, when they needed a parent_id of
collection_id to sort correctly.

eric