Hallo! Heeft iemand hier ervaring met nested sets? Dat is het opslaan van hiërarchische data. Dit is bijvoorbeeld handig als je wil dat een gebruiker bij een CMS een menu kan maken met zovel submenu's als hij wil. Ik heb het geprobeerd en heb tot nu toe dit:

<?php

class Navigation{

// Krijg de hoofdnavigatie-items
function headNav(){

$mysqli = new mysqli("LOCALHOST", "GEBRUIKERSNAAM", "WACHTWOORD", "DATABASENAAM");
// Krijg de naam van de links
$sql = "SELECT * from `nested_category`";
$return .= "<ul>";

if($result = $mysqli->query($sql)){
while($Rij = $result->fetch_assoc()){
if($Rij['category_id'] != 1){
$rgt = $Rij['rgt'];
$lft = $Rij['lft'];

if($rgt - $lft > 1){
$name = $Rij['name'];
$return.= "<li><a href='#'>".$name."</a></li>";
$sql2 = "SELECT * FROM `nested_category` WHERE `name` = '$name'";

if($result2 = $mysqli->query($sql2)){
while($Rij2 = $result2->fetch_assoc()){
$rgt2 = $Rij2['rgt'];
$lft2 = $Rij2['lft'];
$sql3 = "SELECT * FROM `nested_category` WHERE `rgt` AND `lft` BETWEEN '$rgt' AND '$lft'";

if($result3 = $mysqli->query($sql3)){

while($Rij3 = $result->fetch_assoc()){
$return.= "Hallo";
}
}else{
$return.= $mysqli->error;
}
}
}
}
}

}
}

$return.= "</ul>";
return $return;

}


}
?>

Iemand die tips heeft voor nested sets? Of iemand die weet hoe je makkelijker en efficiënter zo'n functie kan toe voegen? Ik wil dus een submenu kunnen maken...Iemand enig idee?
Als je met MySQL moet werken kan je jammer genoeg geen Common Table Expressions gebruiken =[
CTE's ondersteunen namelijk recursive queries, de databases die ik ken die CTE support hebben in elk geval.
Het enige wat je dan nodig hebt is een parent id. Een van de redenen dat ik PostGreSQL verkies boven MySQL.

Deze presentatie heeft wel interessante informatie over trees :http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back slide 48.

Reageren