in reply to Re^2: Hierarchical Tree Traversal
in thread Hierarchical Tree Traversal

Thanks for directing me in the right direction. The problem was indeed the $i reference. Also I had a mistake in my right statement. The correct algorithm to generate right and left ids for a hierarchical tree should be:
my $root =1; my $counter = 1; rebuild_tree($root); sub rebuild_tree{ my $idy = shift; my $result= $dbh->prepare("SELECT id FROM terms WHERE parent_id = ?"); my $left = $dbh->prepare("UPDATE terms SET left_id=? WHERE id = ?"); my $right= $dbh->prepare("UPDATE terms SET right_id=? WHERE id = ?"); $left->execute($ctr++,$idy); $result->execute($idy); while (my $i = $result->fetchrow_hashref()) { rebuild_tree($i->{id}); } $right->execute($ctr++,$idy); }#end of sub
The only way I could get it to work is by inserting the prepare handles in the sub.

Replies are listed 'Best First'.
Re^4: Hierarchical Tree Traversal
by eric256 (Parson) on Jul 15, 2004 at 20:05 UTC

    Since you are calling it recursivly you WANT to prepare them in there. Otherwise you handles would be re-executed before they finished fetchrowing. :)


    ___________
    Eric Hodges