phpbar.de logo

Mailinglisten-Archive

Nested Tree Set, BUG in MySQL?

Nested Tree Set, BUG in MySQL?

Manuel Trunk mysql_(at)_lists.phpcenter.de
Wed, 23 May 2001 16:36:17 +0200


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