Dear listers, can anyone shine a light on this one...
I have some HTML page-titles which i'd like to put in a dropdown menu. Least load for server is when just using a server-cursor. And going trough the results just once. So best thing is to order the titles in the right way when recieving them from the database: ------------- pagesetup ------------- pgID pgMemberOf pgName hasMembers ------------- like this: ------------------------------------------------ 1.HomePage (hasMembers > 0, pgMemberOf = 0) >> 1.1. Products >> 1.1.1 Toys & Tools (hasMembers = 0) >> 1.1.2 Shoestrings >> 1.2. Services >> 1.2.1 Pinball repair >> 1.2.1.1 New Balls >> 1.2.1.2 Empty your machine >> 1.2.2 We tie your shoes >> 1.2.2.2 Left Feet Ties >> 1.2.2.2.1 Untying A Knot >> 1.2.2.2 Right Feet Ties >> 1.3. Links >> 1.4.. you get the picture .. ------------------------------------------------- So far, I've made a recursive function which returns all data as a string HTML: -pseudo-CODE----------------------------- buildTree(HomepageID) function buildTree(myPgID) mySQL = getSQL(myPgID) myObjRS = getRecordset(mySQL) Loop Trough records (myObjRS) If this page(pgID) has Members strReturn = ... *!Recursive!-----------------!* strReturn += buildTree(pgID) else strReturn = ... end if Loop close recordset return strReturn end function -END-pseudo-CODE--------------------------- Bad thing about this function is that it opens up lots of recordsets (for each sub of a sub,...) Positive: it works !! Now, I was wondering if it couldn't be done in the mySQL-database itself. ??? ( MyISAM tables / MySQL 3.23.54 ) I tried out this one ... -SQLstring---------------------------------- SELECT ps2.pgID As parentID, ps2.pgName AS parentPage, ps1.pgID, ps1.pgName, CONCAT_WS( '.' , LPAD( ps5.pgNr ,2, '0' ), LPAD( ps4.pgNr ,2 , '0' ), LPAD( ps3.pgNr ,2 , '0' ), LPAD( ps2.pgNr ,2 , '0' ), LPAD( ps1.pgNr ,2 , '0' ) )AS myOrder FROM pagesetup AS ps1 LEFT OUTER JOIN pagesetup AS ps2 ON ps1.pgMemberOf = ps2.pgID LEFT OUTER JOIN pagesetup AS ps3 ON ps2.pgMemberOf = ps3.pgID LEFT OUTER JOIN pagesetup AS ps4 ON ps3.pgMemberOf = ps4.pgID LEFT OUTER JOIN pagesetup AS ps5 ON ps4.pgMemberOf = ps5.pgID ORDER BY myOrder; >>like in: http://lists.hampshire.edu/pipermail/computerscience/2001-September/003304.h tml -------------------------------------------- As you can see, this is limited to just 5 sub-levels (ps5) and 99 pages on each level(LPAD-2). Again, it works ;) but couldn't there perhaps be a more elegant and 'open' method to use? What way would you guys tackle this recursiveness in MySQL? cheers, and Tx for staying this far down ;) Bart --------------------------------------------------------------------- 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