|
|
|
|
|
|
|||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
|
|
LinkBack | Themen-Optionen | Thema bewerten |
|
|
#1 (permalink) |
|
Erfahrener Benutzer
Registriert seit: 20.08.2008
Beiträge: 117
![]() |
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:
Code:
Saeugetiere ---Nagetiere ---Primaten ------Affen ------Halbaffen 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 | +------+-------------+-------+------+ 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 | +------+-------------+-------+------+ Gruß sharp |
|
|
|
|
|
|
|
PHP Code Flüsterer
Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten
|
|
|
|
#2 (permalink) |
|
Benutzer
Registriert seit: 07.12.2007
Beiträge: 71
PHP-Kenntnisse: Fortgeschritten ![]() |
Puh ich muss gestehen mit Nested Set bin ich nie richtig warm geworden. Da ich für die viele Anwendung für zu umfangreich und kompliziert halte.
Aber wenn ich das noch richtig in Erinnerung habe ist schon deine erste Tabelle falsch da in dieser zweimal die 3 auftaucht was nicht sein kann. Zudem solltest erstmal Versuchen deine Funktionen kleiner und einfach zu gestalten in deiner Funktion passiert viel auf einmal. Am besten du legst dir einen Saubernbaum an und schreibst dir eine Funktion hast die dir gezielt ein weiteres Element anlegen. Im grunde müsste da die Information name,lft und ob es auf der gleichen ebene sein soll oder ein unter elment reichen.
__________________
Ich mag Schildkröten! |
|
|
|
|
|
#3 (permalink) |
|
Erfahrener Benutzer
|
Wie oben schon steht. Per Definition ist es falsch, dass du zweimal lft 3 drin stehen hast. Die Methode habe ich mir nicht angeschaut, aber irgendwo ein ">" durch ein ">=" austauschen.
Und ja, der erste Baum ist auch schon falsch. Im Grunde darf keine Zahl in lft oder rgt doppelt vorkommen, denn über diese Zahlen wird eindeutig sortiert. Gucke dir bei Abbildung 3 in deinem Link einmal an, wie es auszusehen hat. Das passt schon nicht auf deine Ursprungstabelle, von der du ausgehst, bevor du die Maus dazutust.
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt. Kostenlos-Webspace zu Weihnachten |
|
|
|
|
|
#4 (permalink) |
|
Moderator
Registriert seit: 11.05.2008
Beiträge: 3.846
![]() ![]() ![]() ![]() |
Hallo,
falls du wegen der Performance auf Nested Set umgestiegen bist, ich hatte hier: Wert aus Datei lesen + anordnen - Forum: phpforum.de mal ein Beispiel gepostet, wie du mithilfe von PHPs Objektreferenzierung einen Baum aus einer id | parent_id Datenbanktabelle/CSV-Datei erzeugen kannst, bei einer einzigen Abfrage. Allerdings duerfen dann nicht mehrere Baeume in der Tabelle untergebracht werden, bzw. muessen sie explizit unterscheidbar sein (sich also nicht implizit durch die Zuordnungen ergeben), z.B. durch eine zusaetzliche Spalte. |
|
|
|
|
|
#5 (permalink) |
|
Moderator
Registriert seit: 03.09.2004
Beiträge: 11.637
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Bevor da man vielleicht das Rad neu erfindet wird, es gibt einige fertige Systeme und Ansätze für Systeme die Nested-Sets in Datenbanken abbilden können:
DB_NestedSet [url=http://dev.iordanov.net/archives/8]dev.iordanov.net
__________________
robo47.net - Blog, Codeschnipsel und mehr | |
|
|
|
|
|
#6 (permalink) |
|
Moderator
Registriert seit: 11.05.2008
Beiträge: 3.846
![]() ![]() ![]() ![]() |
Ich hab meinen Ansatz gerade nochmal getestet:
Beispiele erzeugen: PHP-Code:
PHP-Code:
Code:
FS: DSCN0420.JPG Childcount: 0 Backup » 2005-01-01 » c » g » localhost » public_html » ling » img » gallery » 2 » th » DSCN0420.JPG required: 0.390646s @Threadstarter: Sorry für OT, falls du wirklich nur auf Nested Set eingehen wolltest. |
|
|
|
|
|
#8 (permalink) |
|
Erfahrener Benutzer
Registriert seit: 20.08.2008
Beiträge: 117
![]() |
Hi,
Ich hab mir die PEAR "DB_NestedSet" angeschaut die ja schon recht mächtig ist. Jedoch is mir auf gefalle das in den Test datein ein fehler sein könnte da die erzeugt tabell komische lefts und rights erzeugt. (Das bild stammt aus dem Anhang) @Chriz ich würde das ganze doch lieber per Nested Set Lösen und nicht per Parent ID Methode, wobei dien Ansatz dafür schon recht gut daher kommt. @robo47 zu dev.iordanov.net dort war ich bereits schon es schaut auch recht gut aus, nur hab ich mit dem Zend Framework noch nichts gemacht. Wobei is das nicht etwas zu mächtig für nur den einen Teil? Gibt es sonst vllt noch ein Lösungsansatz? Gruß Sharp |
|
|
|
|
|
#9 (permalink) | |
|
Moderator
Registriert seit: 03.09.2004
Beiträge: 11.637
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Zitat:
Das ist ne Geschmackssache, das ZF muss man ja auch nicht komplett einsetzen, man kann immer versuchen alles neu zu erfinden oder halt auf fertige Frameworks oder Komponenten aufsetzen. Imho seh ich grad dass oben mein Link wieder vom Forum gekillt wurde, da Stand auch noch Doctrine (ein PHP-ORM-System) zur Wahl. Doctrine ORM for PHP - NestedSet. Egal ob Zend_Db, Doctrine oder PEAR, overhead hat man damit immer, spart aber unter Umständen eine Menge Zeit, vermeidet eventuelle Bugs und setzt auf geteste Systeme, ob man das will muss man für sich selbst entscheiden. Ich würde heute z.b. nicht mehr mit mysql_* arbeiten, schon allein weil man sich darum auch wieder nen vernünftigen wrapper fürs errorhandling basteln muss, weil man sonst nur sehr umständlich ordentliche Fehlerbehandlung machen kann. Ich selbst nutze jetzt seit einiger Zeit das Zend-Framework mit Doctrine für die Datenbank-Sachen und klar ist das einiges an Overhead und man muss sich damit auseinandersetzen, aber es nimmt einem viel Arbeit ab, hat teilweise Lösungen die besser sind als auf was man selbst kommen würde und sie werden halt meist von mehr als nur einer Person genutzt haben also auch eine etwas bessere Qualitätskontrolle. Den Overhead der sich in der Ausführzeit und Speicherverbrauch niederschlägt kann man an vielen Stellen mit ordentlichem Caching wieder rausholen.
__________________
robo47.net - Blog, Codeschnipsel und mehr | |
|
|
|
|
|
|
#10 (permalink) |
|
Neuer Benutzer
Registriert seit: 12.08.2008
Beiträge: 7
![]() |
Hallo zusammen.
@Varon : Nested Sets sind super, man muss sich nur ein wenig damit beschäftigen. @sharp : Dein Codeschnipsel scheint mir nicht vollständig. Wenn du deine einfüge Operation bzw. den SQL Query dazu posten würdest, könnte ich dir sicher sagen wo der Fehler liegt. Einen guten Artikel hat Arne Klemplert unter www.klempert.de veröffentlicht. Hatte ich auch mal vor, nur Herrn Klemplerts Artikel ist super und warum das Rad erneut erfinden. Beste Grüße, Stefan ----------------- http://www.stefan-neuser.eu Geändert von stefant42 (13.07.2009 um 16:36 Uhr). |
|
|
|
|
|
|
|
PHP Code Flüsterer
Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten
|
|
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| nested sets update und insert auf eine tabelle in einer aktion | litterauspirna | Datenbanken | 9 | 09.11.2008 13:57 |
| Nested Sets und viele Fragen... | BartTheDevil89 | Datenbanken | 7 | 13.08.2008 10:18 |
| nested set dbmodell subtrees verschieben | raffnix | Datenbanken | 12 | 08.06.2008 13:27 |
| Nested Sets oder Rekursion? | litterauspirna | PHP Tipps 2008 | 8 | 06.06.2008 16:57 |
| Nested Sets in ein Mehrdimensionales Array | Simon9990 | PHP-Fortgeschrittene | 2 | 29.10.2007 17:38 |
| Nested Sets Query | GSJLink | Datenbanken | 12 | 08.09.2007 10:55 |
| menü, nested set oder ähnliches? | Promaetheus | PHP Tipps 2007 | 13 | 15.02.2007 22:37 |
| Nested Sets und Silbings | nightfreak | Datenbanken | 10 | 06.01.2006 13:58 |
| Nested Sets History | Sirke | PHP-Fortgeschrittene | 1 | 21.10.2005 08:50 |
| erklärung gesucht: nested set query! | Sirke | Datenbanken | 0 | 19.09.2005 17:24 |
| Alternative zu Nested Sets | fantast | Datenbanken | 1 | 16.08.2005 01:14 |
| Nested Sets mit Berechtigungen? | daniel987 | Datenbanken | 3 | 07.06.2005 22:18 |
| Frage zu nested sets... | PHP-Fortgeschrittene | 2 | 04.03.2005 09:57 | |
| Nested Set Trees und Pfade | Datenbanken | 0 | 16.12.2004 16:51 | |
| NESTED SETS dieses Thema sollte abgehakt werden | PHP Tipps 2004 | 0 | 12.10.2004 18:18 | |