[SQL] LTREE extension and "order by"

2011-07-20 Thread Ivan Polak
Hi,

in postgreSQL (with LTREE extension) database I have the following
table "comments":

id BIGINT /* id */
article_id BIGINT /*article-id */
parent_id BIGINT
comment TEXT
path LTREE
level INTEGER /* level */

with the following rows:

id article_id comment parent_id path level
1 1  1 1
2 1  1 1.2 2
3 1  2 1.2.3 3
4 1  2 1.4 2
5 1  4 1.4.5 3
6 1  6 1
7 1  6 6.7 2
8 1  6 6.8 2
9 1  9 1
10 1  10 1
11 1  5 1.4.5.11 4

and I need to select complete tree (with correct order of comments).

SELECT * from comments where article_id = 2 order by 

when I used:

SELECT * from comments where article_id = 2 order by path

the result is:

id comment path
1  1
2  1.2
3  1.2.3
4  1.4
5  1.4.5
11  1.4.5.11
10  10
6  6
7  6.7
8  6.8
9  9

BUT, it is wrong, because comment with id = 10 is after comment with id=11

(i know, this is correct, because ordering by column PATH [as TEXT],
and 10 is 'after' 1.4.5.11)

, but I need :

id comment path
1  1
2  1.2
3  1.2.3
4  1.4
5  1.4.5
11  1.4.5.11
6  6
7  6.7
8  6.8
9  9
10  10

thanks

Ivan

-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] LTREE extension and "order by"

2011-07-21 Thread Ivan Polak
Hi, thank you for your answer, please can You send me complete select
command how to convert ltree column to integer[] and use it to order
by.

thanks

Ivan

2011/7/21 pasman pasmański :
> Hi.
>
> You should convert path to integer[].
>
> 2011/7/20, Ivan Polak :
>> Hi,
>>
>> in postgreSQL (with LTREE extension) database I have the following
>> table "comments":
>>
>> id BIGINT /* id */
>> article_id BIGINT /*article-id */
>> parent_id BIGINT
>> comment TEXT
>> path LTREE
>> level INTEGER /* level */
>>
>> with the following rows:
>>
>> id article_id comment parent_id path level
>> 1 1  1 1
>> 2 1  1 1.2 2
>> 3 1  2 1.2.3 3
>> 4 1  2 1.4 2
>> 5 1  4 1.4.5 3
>> 6 1  6 1
>> 7 1  6 6.7 2
>> 8 1  6 6.8 2
>> 9 1  9 1
>> 10 1  10 1
>> 11 1  5 1.4.5.11 4
>>
>> and I need to select complete tree (with correct order of comments).
>>
>> SELECT * from comments where article_id = 2 order by 
>>
>> when I used:
>>
>> SELECT * from comments where article_id = 2 order by path
>>
>> the result is:
>>
>> id comment path
>> 1  1
>> 2  1.2
>> 3  1.2.3
>> 4  1.4
>> 5  1.4.5
>> 11  1.4.5.11
>> 10  10
>> 6  6
>> 7  6.7
>> 8  6.8
>> 9  9
>>
>> BUT, it is wrong, because comment with id = 10 is after comment with id=11
>>
>> (i know, this is correct, because ordering by column PATH [as TEXT],
>> and 10 is 'after' 1.4.5.11)
>>
>> , but I need :
>>
>> id comment path
>> 1  1
>> 2  1.2
>> 3  1.2.3
>> 4  1.4
>> 5  1.4.5
>> 11  1.4.5.11
>> 6  6
>> 7  6.7
>> 8  6.8
>> 9  9
>> 10  10
>>
>> thanks
>>
>> Ivan
>>
>> --
>> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-sql
>>
>
>
> --
> 
> pasman
>
> --
> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-sql
>

-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] LTREE extension and "order by"

2011-07-21 Thread Ivan Polak
hi, thank you, but there is error:

ERROR:  cannot cast type ltree to text
LINE 1: ... article_id = 2 order by string_to_array(path::text,'.'):...

Ivan

On 21 July 2011 17:25, Carla  wrote:
> Try it:
> select * from comments where article_id = 2 order by
> string_to_array(path::text,'.')::integer[];
>
> 2011/7/21 Ivan Polak 
>>
>> Hi, thank you for your answer, please can You send me complete select
>> command how to convert ltree column to integer[] and use it to order
>> by.
>>
>> thanks
>>
>> Ivan
>>
>> 2011/7/21 pasman pasmański :
>> > Hi.
>> >
>> > You should convert path to integer[].
>> >
>> > 2011/7/20, Ivan Polak :
>> >> Hi,
>> >>
>> >> in postgreSQL (with LTREE extension) database I have the following
>> >> table "comments":
>> >>
>> >> id BIGINT /* id */
>> >> article_id BIGINT /*article-id */
>> >> parent_id BIGINT
>> >> comment TEXT
>> >> path LTREE
>> >> level INTEGER /* level */
>> >>
>> >> with the following rows:
>> >>
>> >> id article_id comment parent_id path level
>> >> 1 1  1 1
>> >> 2 1  1 1.2 2
>> >> 3 1  2 1.2.3 3
>> >> 4 1  2 1.4 2
>> >> 5 1  4 1.4.5 3
>> >> 6 1  6 1
>> >> 7 1  6 6.7 2
>> >> 8 1  6 6.8 2
>> >> 9 1  9 1
>> >> 10 1  10 1
>> >> 11 1  5 1.4.5.11 4
>> >>
>> >> and I need to select complete tree (with correct order of comments).
>> >>
>> >> SELECT * from comments where article_id = 2 order by 
>> >>
>> >> when I used:
>> >>
>> >> SELECT * from comments where article_id = 2 order by path
>> >>
>> >> the result is:
>> >>
>> >> id comment path
>> >> 1  1
>> >> 2  1.2
>> >> 3  1.2.3
>> >> 4  1.4
>> >> 5  1.4.5
>> >> 11  1.4.5.11
>> >> 10  10
>> >> 6  6
>> >> 7  6.7
>> >> 8  6.8
>> >> 9  9
>> >>
>> >> BUT, it is wrong, because comment with id = 10 is after comment with
>> >> id=11
>> >>
>> >> (i know, this is correct, because ordering by column PATH [as TEXT],
>> >> and 10 is 'after' 1.4.5.11)
>> >>
>> >> , but I need :
>> >>
>> >> id comment path
>> >> 1  1
>> >> 2  1.2
>> >> 3  1.2.3
>> >> 4  1.4
>> >> 5  1.4.5
>> >> 11  1.4.5.11
>> >> 6  6
>> >> 7  6.7
>> >> 8  6.8
>> >> 9  9
>> >> 10  10
>> >>
>> >> thanks
>> >>
>> >> Ivan
>> >>
>> >> --
>> >> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
>> >> To make changes to your subscription:
>> >> http://www.postgresql.org/mailpref/pgsql-sql
>> >>
>> >
>> >
>> > --
>> > 
>> > pasman
>> >
>> > --
>> > Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
>> > To make changes to your subscription:
>> > http://www.postgresql.org/mailpref/pgsql-sql
>> >
>>
>> --
>> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-sql
>>
>
>

-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] LTREE extension and "order by"

2011-07-21 Thread Ivan Polak
HI,
thanks, thanks Carla, your solution is OK :-) (i`m using PostgreSQL
8.2, so Pavel is right).

Ivan

On 21 July 2011 18:28, Carla  wrote:
> Hmm, I'm using PostgreSQL 8.4 and it worked.
> Try to use the function ltree2text instead of ::text.
> select * from comments where article_id = 2 order by
> cast(string_to_array(ltree2text(path),'.') as integer[]);
>
> 2011/7/21 Ivan Polak 
>>
>> hi, thank you, but there is error:
>>
>> ERROR:  cannot cast type ltree to text
>> LINE 1: ... article_id = 2 order by string_to_array(path::text,'.'):...
>>
>> Ivan
>>
>> On 21 July 2011 17:25, Carla  wrote:
>> > Try it:
>> > select * from comments where article_id = 2 order by
>> > string_to_array(path::text,'.')::integer[];
>> >
>> > 2011/7/21 Ivan Polak 
>> >>
>> >> Hi, thank you for your answer, please can You send me complete select
>> >> command how to convert ltree column to integer[] and use it to order
>> >> by.
>> >>
>> >> thanks
>> >>
>> >> Ivan
>> >>
>> >> 2011/7/21 pasman pasmański :
>> >> > Hi.
>> >> >
>> >> > You should convert path to integer[].
>> >> >
>> >> > 2011/7/20, Ivan Polak :
>> >> >> Hi,
>> >> >>
>> >> >> in postgreSQL (with LTREE extension) database I have the following
>> >> >> table "comments":
>> >> >>
>> >> >> id BIGINT /* id */
>> >> >> article_id BIGINT /*article-id */
>> >> >> parent_id BIGINT
>> >> >> comment TEXT
>> >> >> path LTREE
>> >> >> level INTEGER /* level */
>> >> >>
>> >> >> with the following rows:
>> >> >>
>> >> >> id article_id comment parent_id path level
>> >> >> 1 1  1 1
>> >> >> 2 1  1 1.2 2
>> >> >> 3 1  2 1.2.3 3
>> >> >> 4 1  2 1.4 2
>> >> >> 5 1  4 1.4.5 3
>> >> >> 6 1  6 1
>> >> >> 7 1  6 6.7 2
>> >> >> 8 1  6 6.8 2
>> >> >> 9 1  9 1
>> >> >> 10 1  10 1
>> >> >> 11 1  5 1.4.5.11 4
>> >> >>
>> >> >> and I need to select complete tree (with correct order of comments).
>> >> >>
>> >> >> SELECT * from comments where article_id = 2 order by 
>> >> >>
>> >> >> when I used:
>> >> >>
>> >> >> SELECT * from comments where article_id = 2 order by path
>> >> >>
>> >> >> the result is:
>> >> >>
>> >> >> id comment path
>> >> >> 1  1
>> >> >> 2  1.2
>> >> >> 3  1.2.3
>> >> >> 4  1.4
>> >> >> 5  1.4.5
>> >> >> 11  1.4.5.11
>> >> >> 10  10
>> >> >> 6  6
>> >> >> 7  6.7
>> >> >> 8  6.8
>> >> >> 9  9
>> >> >>
>> >> >> BUT, it is wrong, because comment with id = 10 is after comment with
>> >> >> id=11
>> >> >>
>> >> >> (i know, this is correct, because ordering by column PATH [as TEXT],
>> >> >> and 10 is 'after' 1.4.5.11)
>> >> >>
>> >> >> , but I need :
>> >> >>
>> >> >> id comment path
>> >> >> 1  1
>> >> >> 2  1.2
>> >> >> 3  1.2.3
>> >> >> 4  1.4
>> >> >> 5  1.4.5
>> >> >> 11  1.4.5.11
>> >> >> 6  6
>> >> >> 7  6.7
>> >> >> 8  6.8
>> >> >> 9  9
>> >> >> 10  10
>> >> >>
>> >> >> thanks
>> >> >>
>> >> >> Ivan
>> >> >>
>> >> >> --
>> >> >> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
>> >> >> To make changes to your subscription:
>> >> >> http://www.postgresql.org/mailpref/pgsql-sql
>> >> >>
>> >> >
>> >> >
>> >> > --
>> >> > 
>> >> > pasman
>> >> >
>> >> > --
>> >> > Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
>> >> > To make changes to your subscription:
>> >> > http://www.postgresql.org/mailpref/pgsql-sql
>> >> >
>> >>
>> >> --
>> >> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
>> >> To make changes to your subscription:
>> >> http://www.postgresql.org/mailpref/pgsql-sql
>> >>
>> >
>> >
>>
>> --
>> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-sql
>>
>
>

-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql