Så här är det. 1.updatera "trädstruktur" (kommer inte på någon bra rubrik)
Jag har en tabell (det hade ju varit smidigt med parent Id eller så men det finns icke)
level är vilken indentering det ska vara...
id row level
26813 0 0
27234 1 0
27202 2 1
27201 3 1
26867 4 0
26870 5 0
26872 6 1
26901 7 1
27231 8 2
27232 9 0
1. Jag vill stoppa in ett nytt värde under row 1 (27234) och ha den i samma nivå. med andra ord ska den hamna som ny rad 4, nuvarande 4 ska bli 5, 5 ska bli 6 osv...
2. Jag vill stoppa in nytt under samma rad (row 1) fast denna gång som underliggande objekt. samma sak händer ju här det ska bli en ny row 4 (fast level ska bli 1)
Någon idé hur man löser detta smidigt, genom sql-satser?
Tack på förhand
/AndreasSv: updatera "trädstruktur" (kommer inte på någon bra rubrik)
Du måste ju först hitta den första rad som ligger på samma nivå eller lägre än den du är ute efter. Jag skulle lösa det så här:
Antag att vi får in önskad rad som "r".
L = SELECT level FROM Table WHERE row = r
Detta ger då alla tänkbara "icke-barn":
SELECT Row, Level FROM Table WHERE Row>r, level<L
Där ska vi ha den högsta; något i stil med:
X = SELECT TOP 1 Row FROM Table WHERE Row>r, level<L
Det är denna rad vi ska flytta ner ifrån, alltså
UPDATE Table SET Row = Row+1 WHERE Row>= X
INSERT INTO Table Values (id, X, L)
2. Borde lösas på samma sätt, men istället använda
INSERT INTO Table Values (id, X, L+1)
(Sql-satserna kan du ju förstås slå ihop via subselects osv.)