I have come to wits end here and have to ask for help. i have a scirpt that works but when i pull the child names my script fatal errors out due to using to much memory. any help would be appriciated. i cant get this to work in 1 loop from my database. the way i did it will keep looping through the tables way to many times. here is the code im using:

database structure:
table - categories
fields - categories_id, parent_id

table - categories_description
fields - categories_id, categories_name

i need the output like this code does but one that doesn't use so much memory.

$nav_query = mysql_query(" SELECT categories.categories_id, categories.parent_id, categories_description.categories_id, categories_description.categories_name  
FROM categories, categories_description WHERE categories.categories_id = categories_description.categories_id ORDER BY categories.parent_id, categories_name ASC"); $tree = ""; // Clear the directory tree $depth = 5; // Child level depth. $top_level_on = 1; // What top-level category are we on? $exclude = array(); // Define the exclusion array array_push($exclude, 0); // Put a starting value in it while ( $nav_row = mysql_fetch_array($nav_query) ) { $goOn = 1; // Resets variable to allow us to continue building out the tree. for($x = 0; $x < count($exclude); $x++ ) // Check to see if the new item has been used { if ( $exclude[$x] == $nav_row['categories_id'] ) { $goOn = 0; break; // Stop looking b/c we already found that it's in the exclusion list and we can't continue to process this node } } if ( $goOn == 1 ) { $tree .= $nav_row['categories_name'] . "<br>"; // Process the main tree node array_push($exclude, $nav_row['categories_id']); // Add to the exclusion list if ( $nav_row['category_id'] < 6 ) { $top_level_on = $nav_row['categories_id']; } $tree .= build_child($nav_row['categories_id']); // Start the recursive function of building the child tree } } function build_child($oldID) // Recursive function to get all of the children...unlimited depth { global $exclude, $depth; // Refer to the global array defined at the top of this script //$child_query = mysql_query("SELECT * FROM categories WHERE parent_id=" . $oldID); $child_query = mysql_query(" SELECT categories.categories_id, categories.parent_id, categories_description.categories_id, categories_description.categories_name FROM categories, categories_description WHERE categories.categories_id = " . $oldID); while ( $child = mysql_fetch_array($child_query) ) { if ( $child['categories_id'] != $child['parent_id'] ) { for ( $c=0;$c<$depth;$c++ ) // Indent over so that there is distinction between levels { $tempTree .= "&nbsp;"; } $tempTree .= "- " . $child['categories_id'] . "<br>"; $depth++; // Incriment depth b/c we're building this child's child tree (complicated yet???) $tempTree .= build_child($child['categories_id']); // Add to the temporary local tree $depth--; // Decrement depth b/c we're done building the child's child tree. array_push($exclude, $child['categories_id']); // Add the item to the exclusion list } } return $tempTree; // Return the entire child tree } echo $tree;

    I'm trying to figure out what you're desired outcome would be. Can you give an example of what you want to output, and then give me an example of what the content of the tables is?

    It seems that you're just going to get a list of categories with this script. But I'm sure that you want more than that.

    You need to describe what you're trying to do a little more, I just don't get it.

      Write a Reply...