Thanks for that, very nice indeed.
The second table is used for other purposes.
I think the depth column speeds up certain queries.

RBS

On Tue, Jan 29, 2019 at 5:09 PM David Raymond <david.raym...@tomtom.com>
wrote:

> I may be missing something, but with recursive CTE's, why do you need the
> second table? I'm assuming it's just to speed things up once the counts get
> large?
>
>
> sqlite> create table folders (id integer primary key, parent_id int
> references folders, name text not null collate nocase, check (not
> (parent_id is null and id != 1)));
> QUERY PLAN
> `--SEARCH TABLE sqlite_master USING INTEGER PRIMARY KEY (rowid=?)
>
>
> sqlite> insert into folders values (1, null, 'Folder1'), (2, 1,
> 'Folder2'), (3, 1, 'Folder3'), (4, 1, 'Folder4'), (5, 2, 'Folder5'), (6, 2,
> 'Folder6');
> QUERY PLAN
> |--SCAN 6 CONSTANT ROWS
> `--SCAN TABLE folders
>
>
> Gonna use backslashes here rather than spaces. So admitidly not exactly
> what you were looking for. But some playing around with string functions
> should be able to get there.
>
>
> sqlite> with recursive foo (id, parent_id, name) as (select * from folders
> where id = 1 union all select folders.id, folders.parent_id, foo.name ||
> '\' || folders.name from folders inner join foo on folders.parent_id =
> foo.id) select * from foo order by name;
> QUERY PLAN
> |--CO-ROUTINE 2
> |  |--SETUP
> |  |  `--SEARCH TABLE folders USING INTEGER PRIMARY KEY (rowid=?)
> |  `--RECURSIVE STEP
> |     |--SCAN TABLE foo
> |     `--SEARCH TABLE folders USING AUTOMATIC COVERING INDEX (parent_id=?)
> |--SCAN SUBQUERY 2
> `--USE TEMP B-TREE FOR ORDER BY
> id|parent_id|name
> 1||Folder1
> 2|1|Folder1\Folder2
> 5|2|Folder1\Folder2\Folder5
> 6|2|Folder1\Folder2\Folder6
> 3|1|Folder1\Folder3
> 4|1|Folder1\Folder4
>
>
> -----Original Message-----
> From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org]
> On Behalf Of Bart Smissaert
> Sent: Tuesday, January 29, 2019 10:52 AM
> To: General Discussion of SQLite Database
> Subject: [sqlite] Displaying hierarchical structure
>
> 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