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 .= " "; }
$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;