Mailinglisten-Archive |
Hallo, folgende Funktion (PHP) soll einen Baum in der DB erzeugen. Tut Sie auch, manchmal klappt es bei bis zu 250 Einträgen einwandfrei. Dann führe insert einmal aus und mindestens ein Feld "l" (für links) wird bis in's Unendliche gezählt. MySQL stürzt ab. Der Fehler ist nicht reproduzierbar, das heisst beim zweiten Anlauf, ausgehend von der gleichen Tabelle, funktioniert alles. Es wäre echt nett wenn mir jemand einen Tip geben könnte. Danke, Manuel Bsp: id Name l r 1 ROOT 1 8 2 U1 2 3 3 U2 4 7 4 U21 5 6 insert(2, "U11"); id Name l r 1 ROOT 1 10 2 U1 2 5 3 U2 786493 9 =>falsch! 4 U21 7 8 5 U11 3 4 Tabelle Tree: id int(11) Null No 0 auto_increment Primary Name text Null Yes l int(11) Null No 0 INDEX r int(11) Null No 0 Funktion: function insert($boss, $new) { $right=$this->db->getfield("Select r from Tree where id=$boss"); if ($boss!=0 AND $right=="") return false; $new=$this->db->qstr($new); if ($right=="") $right=1; $this->db->sqlonly("LOCK TABLES Tree WRITE;"); # Es muss meiner Meinung nach hier irgendwie zu einer Rekursion kommen: $this->db->sqlonly("Update Tree set l=l+2 where (l>$right and r>=$right);"); # Ende Rekursion??? $this->db->sqlonly("Update Tree set r=r+2 where r>=$right;"); $this->db->sqlonly("Insert into Tree (Name, l, r) VALUES ($new, $right, ".($right+1).")"); $this->db->sqlonly("UNLOCK TABLES;"); $this->level=$this->getLevel(); } --- *** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive