Index: openacs-4/packages/acs-core-docs/www/xml/developers-guide/tutorial-advanced.xml
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/xml/developers-guide/tutorial-advanced.xml,v
diff -u -r1.4.2.7 -r1.4.2.8
--- openacs-4/packages/acs-core-docs/www/xml/developers-guide/tutorial-advanced.xml 9 Feb 2004 21:50:21 -0000 1.4.2.7
+++ openacs-4/packages/acs-core-docs/www/xml/developers-guide/tutorial-advanced.xml 9 Feb 2004 22:54:29 -0000 1.4.2.8
@@ -595,7 +595,7 @@
SELECT
c.*,
o.context_id,
- lpad('.',(tree_level(o.tree_sortkey) - 4), '.') as indent
+ tree_level(o.tree_sortkey)
FROM
blog_categories c,
acs_objects o
@@ -605,12 +605,18 @@
o.tree_sortkey"
+ Note the use of the
+ tree_level() function, which
+ gives you the level, starting from 1, 2, 3...
+
Here's an example, pulling all of the children for a given
parent:
SELECT
- children.*
+ children.*,
+ tree_level(children.tree_sortkey) -
+ tree_level(parent.tree_sortkey) as level
FROM
some_table parent,
some_table children
@@ -620,11 +626,22 @@
and parent.key = :the_parent_key;
+ The reason we substract the parent's tree_level from the
+ child's tree_level is that the tree_levels are global, so if you
+ want the parent's tree_level to start with 0, you'll want the
+ subtraction in there. This is a reason you'll commonly see magic
+ numbers in tree_sortkey SQL queries, like
+ tree_level(children.tree_sortkey) -
+ 4. That is basically an incorrect way to do it,
+ and subtracting the parent's tree_level is the preferred method.
+
This example does not include the parent. To return the entire subtree including the parent, leave out the non-equals clause:
SELECT
- subtree.*
+ subtree.*,
+ tree_level(children.tree_sortkey) -
+ tree_level(parent.tree_sortkey) as level
FROM some_table parent, some_table subtree
WHERE
subtree.tree_sorktey between parent.tree_sortkey and tree_right(parent.tree_sortkey)