AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen

Ein Thema von Medium · begonnen am 3. Nov 2010 · letzter Beitrag vom 3. Nov 2010
Antwort Antwort
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen

  Alt 3. Nov 2010, 18:44
Oder einer rekursiven SP
Markus Kinzler
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen

  Alt 3. Nov 2010, 18:51
Der JOIN klappt, allerdings werden leider auch nur die Sätze zurückgeliefert, die die entsprechende Tiefe aufweisen
Sind rekursive SPs in MySQL überhaupt wieder möglich? Mein letzter Stad war, dass dies aus technischen Gründen mal entfernt wurde. Edit: Okay, gibt's, ist aber off-by-default. Bummi, was du genau sagen willst, versteh ich gerade nicht so recht
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 3. Nov 2010 um 18:56 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen

  Alt 3. Nov 2010, 18:53
In MySQL kenne ich mich nicht so aus ( lange her) bei FB geht das, der kennt baer auch rekursive CTE
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen

  Alt 3. Nov 2010, 19:11
etwas in der Art
SQL-Code:
Select Cast(ID as Int) as ID, Parent, Cast([text] as Varchar(4000)) as text
into #tmp
from tree --where Parent is NULL


While Exists(Select * from #tmp join tree on tree.Parent=#tmp.ID)
Update #tmp set text = #tmp.text +' '+ tree.Text ,#tmp.ID=tree.id
from tree
where tree.Parent=#tmp.ID


Select * from #tmp
Drop table #tmp
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von mkinzler ( 3. Nov 2010 um 19:15 Uhr) Grund: Code-Tag durch SQL-Tag ersetzt
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen

  Alt 3. Nov 2010, 21:02
Hmhmhm, ich habe jetzt zunächst mit einer SP rumgespielt, wobei ich hier bisher nur mit einfachen Einzeilern rumgemacht habe. MySQL meckert einen Fehler in der letzten Zeile des folgenden an:
SQL-Code:
CREATE FUNCTION makefullname (name VARCHAR(255), pid INT)
RETURNS VARCHAR(255)
BEGIN
  DECLARE name2 VARCHAR(255);
  DECLARE pid2 INT;
  DECLARE c CURSOR FOR SELECT name, parentID FROM testtabelle WHERE id=pid;

  OPEN c;
  FETCH c INTO name2, pid2;

  IF pid2!=0 THEN
    RETURN CONCAT(name, ' ', makefullname(name2, pid2));
  ELSE
    RETURN name;

  CLOSE c;
END;
"END;" ist fast sicher richtig . Aber wo ist mein Patzer wirklich? Zudem scheint mein MySQL server die Variable zum Verstellen der Rekursionstiefe nicht. Lustigerweise benennt das selbe Manual für die selbe MySQL Version (5.1) sowohl die Option zum Einstellen der maximalen Tiefe, schreibt in der Sektion zu Einschränkungen von SPs aber gleichzeitig "- Stored functions cannot be used recursively. Watten nu!? *seufz*

Das mit dem JOIN wäre so sexy gewesen. Im Zweifel werd ich morgen auch noch mal temporäre Tabellen versuchen - ich hoffe, dass das nicht zu langsam wird :\
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von mkinzler ( 3. Nov 2010 um 21:19 Uhr) Grund: Code-Tag durch SQL-Tag ersetzt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen

  Alt 3. Nov 2010, 21:04
Was für einen Fehler?
Markus Kinzler
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: [SQL] Kaskadierende Eltern-Kind Beziehung in selber Tabelle auflösen

  Alt 3. Nov 2010, 21:17
Zitat:
Fehler, währen die Abfrage ausgeführt wurde.

MySQL Fehlernummer1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 17
Der Fehler 1064 scheint laut Onkel Google öfter mal vorzukommen, und zwar bei einer ganzen Fülle von Operationen, worunter auch CREATE TABLEs und völlig andere Dinge gehören. Eine genauere Beschreibung zu dieser Nummer habe ich leider nicht finden können, wodurch die Meldung für mich so aussagekräftig wird wie "geht nicht" :\
Ich benutze übrigens den MySQL Administrator aus den GUI-Tools von MySQL.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz