NESTED SETS in XML - Gruppierung von Elementen
Hallo Thomas!
Auf Basis unterer Baumstruktur und der Basisquery http://www.selfphp.de/forum/showthread.php?t=23668 suche ich eine Möglichkeit der XML Ausgabe bei gruppierten Elementen. Der Vorteil liegt im einfacheren Einfügen von Elementen bei grossen Bäumen. Code:
vcard Code:
<vcard> Meine Überlegung. Da das Einfügen in einen Nested Set Baum recht aufwendig ist. (Alle lft,rgt des gesamte Baum hinter den neuen Element müssen neu beschrieben werden). Gibt es zwei Möglichkeiten. Lösungsansatz 1) Zusammenfassen von Elemente zu Gruppen zB: Element geo besteht aus Unterelemente latitude,longitude wobei die Reihenfolge der der Unterelemente egal ist Am Beispiel vcard würde die Grundstruktur so ausschauen vcard[1,8] n[2,3] geo[4,5] adr[6,7] für alle Unterelemente von geo[4,5] gilt (man kann den beliebig viele Unterelemente einfügen mit geringstem Aufwand) latitude[4,5] longitude[4,5] Ergebnis: vcard[1,8] n[2,3] geo[4,5],latitude[4,5],longitude[4,5] adr[6,7] geo hat die Eigenschaft die niedrigste id in der Gruppe zu besitzen Ansatz: Baum mit Elemente zusammenbauen (wie bisher), Unterelemente per group_concat zusammenbauen und nach <> anhängen Lösungsansatz 2) Zweite Tabelle anlegen Eine Tabelle für Grobstruktur, eine für Unterelemente Im Sinne des Nested Set "alles aus eine Struktur" finde ich die erste Lösung besser. Was sagt Du? grüsse helmut (Content liefere ich jeweils nach) |
AW: NESTED SETS in XML - Gruppierung von Elementen
Zitat:
Zitat:
Grüße Thomas |
AW: NESTED SETS in XML - Lösung 1a
Lösung für Ansatz 1
Code:
SET @a=0; Erklärung: Erste Unionmenge bleiben alle Elemente nach lft - Zweite Menge werden alle mit gleichen rgt "groupiert" und nach id sortiert. Da die Unterelemente alle recht von <> stehen sollten. Mit @a stellt man fest ob es ein <> sonst kommt <>xx</> Frage: wie würdest du die Tabelle den Indizieren? Eine andere Möglichkeit währe noch eine weitere UNION Menge (Menge aller Unterelemente) hinzuzufügen und WENN zu erweitern. Leider bin ich nicht dahinter gekommen wie ich diese Menge erzeugen soll - -Eine Idee? An Lösungsansatz 2 (2 tabellen) arbeite ich gerade. Ich würde gerne beide Auflösen um die Geschwindigkeit zu Testen. Hier zu Testzwecken für Lösung 1 Code:
CREATE TABLE IF NOT EXISTS `tree` ( grüsse Helmut - Du hast mir wirklich geholfen, oft genügt ja schon ein Hinweis und es kommt ins Rollen: |
AW: NESTED SETS in XML - Gruppierung von Elementen
Also Deine Lösung #1 sieht ja eigentlich ganz aus.
Für die Lösung #2 habe ich an folgende Tabellen gedacht, aber so richtig einfach wird der SQL nicht. Auf die schnelle habe ich keine Lösung gefunden. Also .. Code:
CREATE TABLE IF NOT EXISTS `tree` ( Thomas |
AW: NESTED SETS in XML - Gruppierung von Elementen
Na vielleicht hat ich doch eine Idee für die Lösung #2
Code:
SELECT CASE r.flag Grüße Thomas |
AW: NESTED SETS in XML - Gruppierung von Elementen
Tabelle für Lösung 2
Deinen Ansatz finde ich gut, hätte ich mir aber eine einfache Tabellestruktur gedacht Code:
CREATE TABLE IF NOT EXISTS `tree` ( id_sub mit id verknüpfen Funkt nicht aber aber meine Überlegung ging etwa in diese Richtung Code:
SELECT CASE r.flag Vielleicht noch zu Lösung 1 (ohne Zusatztabelle) Gibts bei UNION auch die Möglichkeit einen Teil von zB Menge A in C auszuschliessen. C währe die Menge aller Unterelemente zB: Code:
SELECT A.tag, 1 AS flag, A.lft AS pt, A.id |
AW: NESTED SETS in XML - Gruppierung von Elementen
Zitat:
Spalte id_tree ist meiner Meinung nach notwendig. Der GROUP_CONCAT() funktioniert nur, wenn ein GROUP BY entsprechend vorhanden ist. Grüße Thomas |
AW: NESTED SETS in XML - Gruppierung von Elementen
Du hast natürlich Recht die zweite Tabelle mit einer id_tree auszustatten und GROUP_CONCAT mit group by.
Habe die Lösungen überarbeitet: Ansatz zu Lösung 1b (eine Tabellen) Meine Überlegung für Menge aller Unterelemente - bei UNION zu ergänzen a Oberelemente, b Alle Elemente durch Ausschliessen der Schnittmenge bleiben Unterelemente klappt aber nicht Code:
SELECT tag, 3 AS flag, lft AS pt, id Lösungansatz 2 (zwei Tabellen) Habe nochmals die Tabellen überarbeitet - Reiner Purismus, dieser Lösungsansatz - Tabellen: tree...nur noch die Baumstruktur ohne Inhalt element...alle Elemente und Content wobei der erste in der Reihenfolge immer das Oberelement ist Test-Content Code:
CREATE TABLE IF NOT EXISTS `tree` ( Fast die Lösung - Fehler liegt bei group_concat, liefert das Oberelement nochmals - EINE IDEE? Code:
SELECT CASE flag grüsse helmut |
AW: NESTED SETS in XML - Gruppierung von Elementen
Hallo Helmut,
ich denke, die Lösung 1 ist eine Sackgasse. Zur Lösung 2 folgendes: Nachdem die Tabellenstruktur komplett umgestellt ist, muss natürlich auch der SQL neu überdacht werden. Mein Vorschlag wäre somit: Code:
CREATE TABLE IF NOT EXISTS `tree` ( Grüße Thomas |
AW: NESTED SETS in XML - Gruppierung von Elementen
Du hast recht - lassen wir Lösung 1 weg, wir haben ja eine gut.
Bei der letzten Query hats einen Bug C,C1 an falscher Position G zu früh geschlossen Bin noch nicht dahinter gekommen. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 10:02:51 Uhr. |
Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.