hi Ryan, (btw: if this thread needs spicing up with DoS threats give me a shout and I'll see if can come up with something ;-) with regard to your original question/comments - do not go the route of using 2 tables... you will very quickly find it unwieldy and limiting (e.g. one table for each level in your menu? or if a element is a parent and a child in which table does it belong?) Mark Steudel wrote: > You could use a recursive function and keep it all in one table. > > My Table is similar to the one below: > > ID NAME PID DISPLAY_ORDER I would recommend this basic structure as well (there are other ways of specifying a tree structures but I can't recommend them as I'm still learning about them) as it is the most obvious/simplest form of hierarchical data structure. > > Here's crude recursive function to display this in a list typical of what > you used to style a menu. The great thing about this is that you could have > unlimited submenus if you wanted ... using Marks example as a starting point - I would suggest spliting the functionality into [atleast] 2/3 parts (trying to make the functionality generic so that it is flexible): 1. grab all the data rows you need in a single query (or as little queries as possible) 2. use the retrieved data to build a mutlidimensional array that reflects/models the structure of the menu you want to output. (this could also be a collection of objects) 3. use the m-dimensional array to generate the html that will be outputted. basically it comes down to minimizing the number of calls to the DB, making it possible to generate different menu structures (e.g. the whole tree just a certain level of the tree, only the siblings of the selected node and all the relevant parent, etc) and giving yourself the ability to using different types of actual output (even if in practice that means different kinds of html, e.g. nested <UL>s, a table, simple horizonal list, etc) > > function displayMenu( $pid ) > { > global $db; > > $res =& $db->query( "SELECT * FROM tblmenu WHERE pid = '".$pid."' > ORDER BY display_order" ); > mysqlErrorCheck( $res ); > > while( $res->fetchInto( $objData ) ) > { > $html .= "<li>".$objData['name']; > $html .= "<ul>".displayMenu( $objData['id'] )."</ul>"; > $html .= "</li>"; > } > > return $html; > } > > > echo "<ul>".displayMenu('0')."</ul>"; > > > -----Original Message----- ... -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php