Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden (https://www.delphipraxis.net/153859-alle-kindeskinder-virtueller-ordnerstruktur-herausfinden.html)

TheMiller 22. Aug 2010 21:15

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden
 
Vielen Dank für die Antwort. Habe selbst die Lösung "schon" gefunden (war ziemliche Denkerei, zumal mein Hirn bei Rekursionen immer krampft ;))

Aber so konnte ich mich ordentlich einlesen. CTEs sind eig. eine tolle Sache. Hier meine Lösung:

Delphi-Quellcode:
db.sql('WITH RECURSIVE ordner AS ( ' +
         '     SELECT * FROM K_KATEGORIEN WHERE id = '+IntToStr(Kategorie.ID)+
         '     UNION ALL ' +
         '     SELECT * FROM K_KATEGORIEN ' +
         '     JOIN ordner ON K_KATEGORIEN.parent = ordner.id' +
         ') ' +
         'SELECT * FROM ordner');
Vielen Dank an alle für die Hilfen!

TheMiller 23. Aug 2010 15:25

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden
 
Hallo,

ein Problem habe ich doch noch. Ich verwende jetzt folgendes Statement (selbes wie oben, nur ohne WHERE-Condition), um eine TreeView zu füllen. Doch irgendwie sind alle Unterordner 2-mal vorhanden. Die Stammordner betrifft es nicht, nur die Unter(-unter)Ordner.

Ein "Group-by" bringt die Fehlermeldung

Zitat:

Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause
Hier nochmal beide SQLs

Delphi-Quellcode:
//Mit o.g. Fehlermeldung
db.SQL('WITH RECURSIVE ordner AS ( ' +
         '     SELECT * FROM K_KATEGORIEN GROUP BY id'+
         '     UNION ALL ' +
         '     SELECT * FROM K_KATEGORIEN ' +
         '     JOIN ordner ON K_KATEGORIEN.parent = ordner.id' +
         ') ' +
         'SELECT * FROM ordner');

//Mit o.g. Fehlverhalten (2-Fach-Einträge)
db.SQL('WITH RECURSIVE ordner AS ( ' +
         '     SELECT * FROM K_KATEGORIEN '+
         '     UNION ALL ' +
         '     SELECT * FROM K_KATEGORIEN ' +
         '     JOIN ordner ON K_KATEGORIEN.parent = ordner.id' +
         ') ' +
         'SELECT * FROM ordner');
Hoffe, ihr könnt mir helfen.

Danke im Voraus

generic 23. Aug 2010 15:53

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden
 
Alternativ zu der DB-Struktur welche Ihr gerade nutzt, gibt es noch "Nested Sets".
Bei manchen Aufgabenstellungen eigenen diese sich besser.

TheMiller 23. Aug 2010 15:54

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden
 
Hm... ich kann diese DB-Struktur momentan nicht ändern. Ich bin an sie gebunden.

omata 23. Aug 2010 20:23

AW: Alle Kindeskinder(...) virtueller Ordnerstruktur herausfinden
 
Lass mal das ALL beim UNION weg...
SQL-Code:
WITH RECURSIVE ordner AS (
  SELECT * FROM k_kategorien
  UNION
  SELECT * FROM k_kategorien k
  INNER JOIN ordner o
    ON k.parent = o.id
)
SELECT * FROM ordner


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz