(for filter: query,sql,mysql,table)

I've done this a few times, I mostly do category systems and there
is no reason to list all the categories at one time, so I usually
have a "parent id" to work with in order to get all the sub
categoreis from the DB. However, I have done one where I did want
something like a "Windows Explorer" view.

The following is the table structure and the PHP function I use
to display the information.

The output is something like this:

Folder One
-Sub Folder One
--Sub Folder One-One
Folder Two
-Sub Folder Two

My mail client will wrap the php function, so it may be malformed by
the time you get it.

CREATE TABLE `folders` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `owner_id` int(10) unsigned NOT NULL default '0',
  `parent_id` int(10) unsigned NOT NULL default '0',
  `root_id` int(10) unsigned NOT NULL default '0',
  `name` varchar(254) default NULL,
  PRIMARY KEY (`id`),
  KEY `owner_key`(`owner_id`),
  KEY `parent_key`(`parent_id`),
  KEY `root_key`(`root_id`)
) TYPE=MyISAM


function listFolders($aslink=0,$userid) {
        $query="SELECT DISTINCTROW t.id,t.name "
                ."FROM folders AS t, folders AS r "
                ."WHERE ((t.id=r.root_id) AND (t.owner_id=".$userid."))
"
                ."ORDER BY t.name ASC;"
        ;
        if($result=mysql_query($query)) {
                if(mysql_num_rows($result)) {
                        while($row=mysql_fetch_row($result)) {
                                list($id,$name)=$row;
                                if($aslink) {
                                        printf("<a class=\"folder\"
href=\"inbox.php?fid=%s\">%s</a><br>\n",$id,$name);
                                } else {
                                        printf("<option
value=\"%s\">%s</option>\n",$id,$name);
                                }
                                $query="SELECT t.id,t.parent_id,t.name "
                                        ."FROM folders AS t,folders AS
p, folders AS r "
                                        ."WHERE ((t.parent_id=p.id) AND
(t.root_id=r.id) AND (t.root_id=$id) AND (t.owner_id=".$userid.")) "
                                        ."ORDER BY t.parent_id
ASC,t.name ASC;"
                                ;
                                if($sub_result=mysql_query($query)) {
                                        if(mysql_num_rows($sub_result))
{
        
while($row=mysql_fetch_row($sub_result)) {
        
list($sub_id,$sub_pid,$sub_name)=$row;
        
if($tmp_id!=$sub_pid) {
        
$tmp_id=$sub_pid;
        
$leadin.="-";
                                                        }
                                                        if($aslink) {
        
printf("%s<a class=\"folder\"
href=\"inbox.php?fid=%s\">%s</a><br>\n",$leadin,$sub_id,$sub_name);
                                                        } else {
        
printf("<option
value=\"%s\">%s%s</option>\n",$sub_id,$leadin,$sub_name);
                                                        }
                                                }
                                                $leadin="";
        
mysql_free_result($sub_result);
                                        }
                                }
                        }
                }
        }
}



---------------------
Johnny Withers
[EMAIL PROTECTED]
p. 601.853.0211
c. 601.209.4985 

-----Original Message-----
From: Wakan [mailto:[EMAIL PROTECTED]] 
Sent: Monday, February 18, 2002 10:44 AM
To: [EMAIL PROTECTED]
Subject: how to retrieve a hierarchical structure


Hi,
can someone suggest the best way to perform a query that
extract from a category table all the structure, like a filesystem?
For example, I've a table of categorie like this:
ID      name    descr   ID_parent
and I've assigned -1 to the root category.
I'd like to draw a directory-like structure (like windows explorer), but
I don't know how to extract a directory name, and all sub-directory 
recursively.
Thaks.
Carlo


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail
<[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php



---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to