php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.12.2010, 13:23  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard parent -> nested set

Hallo!

Also ich brauche das zwar momentan nicht, es würde mich aber trotzdem interessieren. Die Frage richtet sich an echte Datenbank-Profis

Angenommen, ich habe:

tabelle:

id: integer not null auto-increment primary-key
parent_id: integer
name: varchar(100)

Beispiel:
Code:
id parent_id name
1  null      haupt1
2  null      haupt2
3  1         sub1 von haupt1
4  1         sub2 von haupt1
5  2         sub1 von haupt2
Kann man daraus mittels SELECT ein nested set bilden?

Warum frage ich das? Weil mir aufgefallen ist, dass nested sets ziemlich komplex sind und manchmal eine parent-Beziehung einfacher wäre.

Sicher könnte man das auch kombinieren, sodass man dann so etwas hätte:

id: integer not null auto-increment primary-key
parent_id: integer
lft: integer not null
rgt: integer not null
name: varchar(100)

Siehe http://dev.mysql.com/tech-resources/...ical-data.html

Aber mich würde interessieren, ob man auch direkt aus parent-Beziehungen mittels SELECT ein nested set bilden könnte.

Geändert von coola (10.12.2010 um 13:28 Uhr).
coola ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.12.2010, 13:35  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

Kurze Antwort: Nein

Lange Antwort: Nein, weil...ein Nested Set darauf angewiesen ist, das left und right Werte zur Verfügung stehen. Alles andere ist nur eine andere Art eine Baumstruktur in einer DB zu speichern aber eben kein Nested Set.

Was du wohl eher suchst, ist ein Query um den ganzen Baum auf einmal und nicht rekursiv abzufragen.
Also ohne Rekursion ist es möglich, aber nicht in einem Query.
Du musst zunächst die Strucktur des Baums haben, also eigentlich nur die maximale Tiefe.
Mit diesen Daten kannst du einen Query schreiben, der den kompletten Baum auf einmal abfragt. Wie das genau geht, weiß ich auch nicht mehr, da wird dir Google aber mit sicherheit bei helfen.
draco88 ist offline   Mit Zitat antworten
Alt 10.12.2010, 13:40  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard

Zitat:
das left und right Werte zur Verfügung stehen.
Das wäre ja dann das gewünschte Ergebnis.

Dass ich also von einer parent-Beziehung ausgehe und mir im SELECT diese beiden Werte ermittle.

Wie gesagt. Ich brauche das jetzt nicht. Vielleicht ist es auch unlogisch, so zu arbeiten. Ich weiß es nicht. Mich würde nur interessieren, ob es möglich wäre. Ich glaube nämlich schon, dass das irgendwie möglich sein sollte. Aber für so etwas reichen meine MySQL-Kenntnisse noch nicht aus.
coola ist offline   Mit Zitat antworten
Alt 10.12.2010, 13:58  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Also ein Konverter lässt sich durchaus auch mit SQL (oder passender: Compound-Statement Syntax) formulieren. Es ist nur halt nich möglich, mit einem SELECT einen kompletten Baum so auszulesen, dass er genau der Struktur einer zukünftigen Nested Set Tabelle entspricht.

INSERT ... SELECT ist da also außen vor...

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 10.12.2010, 15:23  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard

Zitat:
Compound-Statement Syntax
Was ist das? Eine MySQL-Funktion bzw. -Prozedur?
coola ist offline   Mit Zitat antworten
Alt 10.12.2010, 15:25  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Compound Statement Syntax ist Teilmenge dessen, was Du z.B. MySQL erzählen musst, wenn Du ne Stored Procedure erstellst. Relevant für das Problem sind hier die Kontrollflusssteuerungsfunktionalitäten, sprich die Möglichkeit eine Schleife zu basteln.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 10.12.2010, 15:28  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Hallo,

da ich mittlerweile auch nested sets einsetze und vor allem begriffen habe kann ich dir dazu nur anraten dich damit auseinander zu setzen.

Es dient halt dazu hierarchische Datenbäume mit nur einem einzigen Query abzubilden. Wohlbemerkt macht es eigentlich nur dann Sinn wenn eine recht große Tiefe etc. zusammenkommen kann und viele auf diese Baumstruktur zugreifen können. Beim Parent Model bist du gezwungen rekursiv zu arbeiten und das kann bei vielen Zugriffen auf einmal natürlich ein DB schon mal in die Knie zwingen.

Setze dich mal damit auseinander. Was fertiges gibts da auch schonvon Pear.

Gruß Litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 10.12.2010, 15:30  
Gesperrt
 
Registriert seit: 03.12.2010
Beiträge: 860
PHP-Kenntnisse:
Anfänger
coola wird schon bald berühmt werden
Standard

Das dachte ich mir auch schon, dass man so eine Umwandlung nur machen kann, wenn man ein SQL-Script programmiert.

Ich vermute, diese Umwandlung würde relativ viel Zeit in Anspruch nehmen. Zumindest mehr Zeit, als wenn ich gleich direkt mit den nested sets arbeite.

Wäre aber dennoch interessant, so ein SQL-Script zu sehen, das von einer parent-Struktur in eine nested-set-Struktur umwandelt. Aber wie schon erwähnt. Das ist nichts, was ich jetzt brauchen würde.

EDIT:
Zitat:
kann ich dir dazu nur anraten dich damit auseinander zu setzen
Habe das in meinem Projekt schon alles voll ausprogrammiert im nested-set-Stil. Das funktioniert schon alles. Hinzufügen, Löschen, Breadcrumbs, Subtrees, ... Habe mich also schon damit auseinandergesetzt
coola ist offline   Mit Zitat antworten
Alt 10.12.2010, 16:25  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von litterauspirna Beitrag anzeigen
Beim Parent Model bist du gezwungen rekursiv zu arbeiten und das kann bei vielen Zugriffen auf einmal natürlich ein DB schon mal in die Knie zwingen.
Ein Nested Set mit entsprechender Datenmenge und "ein paar" neuen Nodes auch
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 11.12.2010, 13:37  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von G.Schuster Beitrag anzeigen
Ein Nested Set mit entsprechender Datenmenge und "ein paar" neuen Nodes auch
Aber nicht im Frontend. Probleme macht das dann wieder da wenn Bäume oder Teilbäume gelöscht oder verschoben werden müssen.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Nested Set nur teilweise ausklappen BartTheDevil89 PHP Tipps 2010 3 10.11.2010 12:59
Apache2.2 & PHP5 mit MSSQL Extension Fehler AwaKe Server, Hosting und Workstations 4 14.07.2010 14:36
Nested Sets in PHP verarbeiten Squall PHP Tipps 2010 4 06.05.2010 12:24
Nested Sets - multiple Zuordnung alsahmut Datenbanken 16 26.04.2010 11:00
Nested Sets Norber Datenbanken 7 09.01.2010 22:32
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
Gegenstück zu parent:: oder Singleton abstrakt implement. ?? Melchior PHP-Fortgeschrittene 13 26.07.2007 21:25
menü, nested set oder ähnliches? Promaetheus PHP Tipps 2007 13 15.02.2007 22:37
[Erledigt] Baumstruktur (Parent) Berechnungen PHP-Fortgeschrittene 6 31.03.2006 14:45
Nested Sets History Sirke PHP-Fortgeschrittene 1 21.10.2005 08:50
NESTED SETS dieses Thema sollte abgehakt werden PHP Tipps 2004 0 12.10.2004 18:18

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
nested sets parent, nested set parent, mysql nested set parent, nested sets parent auslesen, nested set php, nested sets mit parent_id mysql, php nested set aus parent array, mysql nested sets left right parentid, nested set elternelement auslesen, $parent =& $nested php, sql parent baum auslesen, parent id 2 nested sets, parent_id umwandeln in nested set, nested beziehung, determine parent nested sets, baumstruktur parent model php mysql, nested sets with parent id, parent into nested set, parent model in nested set umwandeln, nested tree parent

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:14 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum