[SQL] LTREE extension and "order by"
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"
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"
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"
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