B
Bgag
Morgen!
Ich habe bis vor kurzen bei Baumstrukturen in einer Datenbank immer mit dem Parentid-System gearbeitet, doch vor kurzem bin ich auch die Nested sets gestoßen.
Sie haben den Vorteil, das die Abfragen aus der Datenbank bis um das 70fache schneller sind, da man zur Abfrage keine rekursiv durchlaufenden Funktionen benötigt. Zudem kann man eine genaue Reihenfolge der Unterpunkte festlegen und relativ einfach abfragen. Da das ganze so praktisch ist und bei mir recht häufig eine Anwendung findet, habe ich beschlossen eine Nested Sets Klasse zu schreiben.
Für Nested Sets gilt im allgemeinem:
* Die Wurzel hat grundsätzlich 1 als LFT-Wert
* Die Sortierung der Knoten ergibt sich aus den LFT-Werten
* Die Anzahl der Nachfahren eines Knotens errechnet sich durch (RGT - LFT - 1) / 2.
* Entsprechend gilt für alle Knoten ohne Kinder: RGT - LFT = 1
* LFT und RGT aller Nachfahren liegen zwischen den LFT- und RGT-Werten der Vorfahren
Ich arbeite hier mit einer erweiterten Version der Nested Sets.
Die Struktur meiner zugehörigen MySQL Tabelle sieht wie folgt aus:
Der zugehörige SQL-Code so:
Die vorläufige Struktur der Klasse sieht so aus:
Hat jemand Vorschläge oder anregungen, wie ich das ganze Ausbauen könnte? Oder ist jemand daran interessiert mir bei der Entwicklung dieser Klasse zu helfen, da er sie gerne auch verwenden möchte?
MfG, Andy
Ich habe bis vor kurzen bei Baumstrukturen in einer Datenbank immer mit dem Parentid-System gearbeitet, doch vor kurzem bin ich auch die Nested sets gestoßen.
Sie haben den Vorteil, das die Abfragen aus der Datenbank bis um das 70fache schneller sind, da man zur Abfrage keine rekursiv durchlaufenden Funktionen benötigt. Zudem kann man eine genaue Reihenfolge der Unterpunkte festlegen und relativ einfach abfragen. Da das ganze so praktisch ist und bei mir recht häufig eine Anwendung findet, habe ich beschlossen eine Nested Sets Klasse zu schreiben.
Für Nested Sets gilt im allgemeinem:
* Die Wurzel hat grundsätzlich 1 als LFT-Wert
* Die Sortierung der Knoten ergibt sich aus den LFT-Werten
* Die Anzahl der Nachfahren eines Knotens errechnet sich durch (RGT - LFT - 1) / 2.
* Entsprechend gilt für alle Knoten ohne Kinder: RGT - LFT = 1
* LFT und RGT aller Nachfahren liegen zwischen den LFT- und RGT-Werten der Vorfahren
Ich arbeite hier mit einer erweiterten Version der Nested Sets.
Die Struktur meiner zugehörigen MySQL Tabelle sieht wie folgt aus:
Code:
ID | root_id | level | lft | rgt | name
Code:
CREATE TABLE `tablename` (
`ID` int(12) unsigned NOT NULL auto_increment COMMENT 'The unique ID of the section',
`root_id` int(12) unsigned NOT NULL default '0',
`level` int(12) unsigned NOT NULL default '0',
`lft` int(12) unsigned NOT NULL default '0',
`rgt` int(12) unsigned NOT NULL default '0',
`name` varchar(50) default NULL COMMENT 'The section name',
PRIMARY KEY (`ID`)
);
Die vorläufige Struktur der Klasse sieht so aus:
PHP:
<?php
/* Require the classes */
require_once('includes/DbConnector.php');
require_once('includes/Validator.php');
/* The NestedSet class */
class NestedSet extends DbConnector
{
/* VARIABLES */
var $db;
/* GET SECTIONS */
function getSections($root=null) {
}
/* GET SECTION */
function getSection($id=NULL) {
}
/* GET PATH */
function getPath($id=NULL) {
}
/* SET SECTION */
function setSection() {
}
/* ADD SECTION */
function addSection() {
}
/* DELETE SECTIONS */
function deleteSection() {
}
/* MOVE SECTION */
function moveSection() {
}
}
?>
Hat jemand Vorschläge oder anregungen, wie ich das ganze Ausbauen könnte? Oder ist jemand daran interessiert mir bei der Entwicklung dieser Klasse zu helfen, da er sie gerne auch verwenden möchte?
MfG, Andy
Zuletzt bearbeitet von einem Moderator: