AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Kategorisierte Struktur sortieren (stored procedure/Cursor)
Thema durchsuchen
Ansicht
Themen-Optionen

Kategorisierte Struktur sortieren (stored procedure/Cursor)

Ein Thema von siles · begonnen am 22. Apr 2008 · letzter Beitrag vom 22. Apr 2008
 
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Kategorisierte Struktur sortieren (stored procedure/Curs

  Alt 22. Apr 2008, 14:25
Du müsstest in der Tabelle eben eine totale Ordnung einführen. Das geht z.B. mit einem hierarchischen Schlüssel. Hier die rekursive Definition:
Code:
Key (Item) = Key(Item.Parent)+ FixedFormat(Item.ID);
Key (Nil)='';
Wichtig ist, das jede Ebene eine feste Stellenanzahl für die Formatierung der eigenen ID bekommt. Dann hätte dein Beispiel (mit einer festen Stellenanzahl von 2) folgende Schlüssel:
Code:
01     Oberkategorie 1 (die ID sei 1)
0101   --K1 (die ID von K1 sei 1)
010101 ----U1
0102   --K2
010201 -----U2
02     Oberkategorie 2
....etc
Du musst in der SP einfach nur die zusätzliche Spalte einfügen und dann diese Spalte entsprechend füllen:
SQL-Code:
CREATE Procedure ListSubTree (@cat_id int)
as

declare @ChildID int
declare @Table Table (
  ID INT,
  PID INT,
  NAME VARCHAR(1000),
  uKEY VarChar(80) -- Schlüssel
)

-- 1.Zeile in die Tabelle

insert into @Table
  select cat_id, cat_pid, cat_name,
   dbo.UDFFixedFormat(cat_id,9) --- Festes 9-stelliges Format (musste selber basteln)
    from cate where cat_id = @cat_id

Declare c Cursor local for select ID from @Table
open c
fetch next from c into @ChildID
while @@Fetch_status = 0 begin

-- Mit jedem Schleifendurchlauf werden in einem Abwasch ALLE Kindknoten eingefügt

  insert into @Table
    select c.cat_id,
   c.cat_pid,
   c.cat_name,
        p.uKEY + dbo.UDFFixedFormat(c.cat_id,9) -- Rekursiv aufgebautes, 3-stelliges Format
   from cate c join cate p on c.cat_pid = p.cat_id
  where c.cat_pid = @ChildID
  fetch next from c into @ChildID
end
close c
deallocate c
select * from @Table order by uKey

GO
Nicht getestet, müsste aber passen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
 


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 07:05 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