Hallo,
ich habe vor einpaar Tagen die "
Nested Sets"
entdeckt und wollte damit nur ma zum Test was kleines ausprobieren. Da ich Probleme beim einlesen des Baumes hatte habe ich erst ma Google abgegrast, jedoch dort nur Beispiele gefunden wo bereits Daten vorhanden sind.
Linkliste:
dev.iordanov.net
http://www.tutorials.de/
http://www.traum-projekt.com/ http://reeg.junetz.de/
http://phpperformance.de/
http://www.php-resource.de/
Und natürlich ha ich auch die Forums Suche verwendet leider auch ohne erfolg.
Mein Problem ist nun das beim einlesen der Daten falsche lft(Links) und rgt(rechts) werte erzeugt werden.
Hier mein Script:
PHP-Code:
function mySQLCon(){
$host="localhost";
$user="xxxxxxxxxxx";
$pass="xxxxxxxxxxx";
$db="test";
$con=mysqli_connect($host,$user,$pass);
mysqli_select_db($con,$db);
return $con;
}
function setRoot($root,$lft=1,$rgt=2){
#mysqli_query(mySQLCon(),"TRUNCATE TABLE `test`;");
$sql2="INSERT INTO tree (name,lft,rgt) VALUES ('$root',$lft,$rgt);";
mysqli_query(mySQLCon(),$sql2);
}
function createTree($tree,$lft=1,$rgt=1,$first=1){
$root=$tree;
echo $root."<br>";
if(is_dir($root)){
$inserts=0;
if($dh=opendir($root)){
while (($item = readdir($dh)) !== false){
if($item!="."&&$item!=".."){
$rgt++;
$lft++;
echo "<b>$rgt</b><br>";
if($first){
$sql="UPDATE tree SET rgt=rgt+2 WHERE rgt >= $rgt;";
$sql.="INSERT INTO tree (name,lft,rgt) VALUES ('$item', $rgt, $rgt+1);";
}else{
$sql="UPDATE tree SET rgt=rgt+2 WHERE rgt >= $rgt;";
$sql.="UPDATE tree SET lft=lft+2 WHERE lft > $rgt;";
$sql.="INSERT INTO tree (name,lft,rgt) VALUES ('$item', $rgt, $rgt +1); ";
}
echo "<pre>";var_dump($sql,$rgt);echo "</pre>";
mysqli_multi_query(mySQLCon(),$sql);
$inserts++;
if(is_dir("$root/$item")&&"$root/$item"!=$root){
$count=createTree("$root/$item",$lft,$rgt,0);
$sql2="UPDATE tree SET rgt=rgt+($count+1) WHERE name='$item';";
mysqli_query(mySQLCon(),$sql2);
}
}
}
}
}
}
setRoot("Saeugetiere");
createTree("Saeugetiere");
Ich wer wende aus dem Beispiel von "http://www.klempert.de/nested_sets/" die Baumstruktur:
Code:
Saeugetiere
---Nagetiere
---Primaten
------Affen
------Halbaffen
Welche soweit auch funktioniert:
Code:
+------+-------------+-------+------+
| id | name | lft | rgt |
+------+-------------+-------+------+
| 1 | Saeugetiere | 1 | 10 |
| 2 | Nagetiere | 2 | 3 |
| 3 | Primaten | 3 | 7 |
| 4 | Affe | 4 | 5 |
| 5 | Halbaffe | 5 | 6 |
+------+-------------+-------+------+
Wenn ich jedoch in Nagetiere nun "Maus" hinzufüge zerhaut es das ganze Konstrukt
Code:
+------+-------------+-------+------+
| id | name | lft | rgt |
+------+-------------+-------+------+
| 1 | Saeugetiere | 1 | 12 |
| 2 | Nagetiere | 2 | 9 |
| 3 | Maus | 3 | 4 |
| 4 | Primaten | 4 | 5 |
| 5 | Affe | 3 | 7 |
| 6 | Halbaffe | 5 | 6 |
+------+-------------+-------+------+
Man beachte das nun "Nagetiere" auch "Primaten" als Kinderelement enthält sowie das "Affe" zum Elternelement von "Primaten" wird. Hat jemand ne Idee wo das Problem hier liegt?
Gruß
sharp