Thanks, will try that.

> order by PATH
So, where is this path coming from?

RBS

On Thu, Jan 31, 2019 at 4:08 PM Jean-Luc Hainaut <jean-luc.hain...@unamur.be>
wrote:

> Recursive CTEs are the most obvious technique to solve this kind of
> problems.
> However, a less known technique can do the job: recursive triggers.
> Here is how the closure of FOLDERS can be computed. It will be stored in
> table CLOSURE:
>
>      create table CLOSURE(PARENT_ID integer, ID integer, DIST integer);
>
> A trigger adds the children rows of each row that has been inserted into
> this table:
>
>      create trigger CLOSURE_INS after insert on CLOSURE
>      for each row
>      begin
>        insert into CLOSURE
>        select new.PARENT_ID,ID,new.DIST+1 from FOLDERS
>        where  PARENT_ID = new.ID;
>      end;
>
> To compute the closure, we just insert the root node:
>
>      insert into CLOSURE select ID,ID,0 from FOLDERS where ID = 1;
>
> or all the nodes:
>
>      insert into CLOSURE select ID,ID,0 from FOLDERS;
>
> To get the strict closure, we discard the initial rows (DIST = 0). And
> to display the node hierarchy:
>
>      select *,substr('      ',1,2*DIST)||cast(ID as char) as Display
>      from CLOSURE order by PATH;
>
> +-----------+----+------+---------+
> | PARENT_ID | ID | DIST | Display |
> +-----------+----+------+---------+
> | 1         | 1  | 0    | 1       |
> | 1         | 2  | 1    |   2     |
> | 1         | 5  | 2    |     5   |
> | 1         | 6  | 2    |     6   |
> | 1         | 3  | 1    |   3     |
> | 1         | 4  | 1    |   4     |
> +-----------+----+------+---------+
>
> The path of each folder is computed in the same way.
>
> J-L Hainaut
>
> > Working on an Android app and part of that is storing SQL in a virtual
> > folder system in SQLite. For this I want to use a so-called closure table
> > as explained nicely here:
> >
> > http://technobytz.com/closure_table_store_hierarchical_data.html
> >
> > I have a table holder the folder details:
> >
> > ID PARENT_ID Folder
> >
> > -------------------------------------
> > 1  0               Folder1
> > 2  1               Folder2
> > 3  1               Folder3
> > 4  1               Folder4
> > 5  2               Folder5
> > 6  2               Folder6
> >
> >
> > And then the closure table:
> >
> > PARENT_ID CHILD_ID DEPTH
> >
> > -----------------------------------------------
> > 1                   1            0
> > 2                   2            0
> > 3                   3            0
> > 4                   4            0
> > 5                   5            0
> > 6                   6            0
> > 1                   2            1
> > 1                   3            1
> > 1                   4            1
> > 2                   5            1
> > 1                   5            2
> > 2                   6            1
> > 1                   6            2
> >
> > What should the SQL be to display the folders like this:
> >
> > Folder        PARENT_ID
> > Folder1       0
> > Folder2       1
> >      Folder5   2
> >      Folder6   2
> > Folder3       1
> > Folder4       1
> >
> >
> > RBS
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@mailinglists.sqlite.org
> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to