og det kan godt ske et produkt kun er tilknyttet katagorien "spiritus" og ikke længere ned i katagorierne. Hvordan får jeg det tilknyttet på "varer" tabellen?
Hvordan udskriver jeg lettets og hurtigst hele hirakiet? hvis jeg har ID=7 vil jeg gerne have skrevet: Dagligvarer -> Drikkevarer -> øl ID NAME ParentID 1 Dagligvarer NULL 2 Computer NULL 3 Børn NULL 4 Mad 1 5 Drikkevarer 1 6 Sodavand 5 7 Øl 5
Du ville være nødt til at hente rekursivt, tagende et punkt af gangen (så du starter med Øl, hvilket fører dig til Drikkevarer, hvilket fører dig til Dagligvarer). Derfor var den anden model måske en ide (der er givet et eksempel i artiklen).
MSSQL2005 har vist fået tilføjet noget de kalder CTE, der med den simple struktur lader dig hente det hele med en query - men det er ikke noget jeg rigtigt har kigget på.
CREATE TABLE stuff (id INTEGER PRIMARY KEY,name VARCHAR(50),parent INTEGER) GO
INSERT INTO stuff VALUES(1,'tools',0) GO INSERT INTO stuff VALUES(2,'hammer',1) GO INSERT INTO stuff VALUES(3,'screwdriver',1) GO INSERT INTO stuff VALUES(4,'fruits',0) GO INSERT INTO stuff VALUES(5,'yellow fruits',4) GO INSERT INTO stuff VALUES(6,'green fruits',4) GO INSERT INTO stuff VALUES(7,'apple',6) GO INSERT INTO stuff VALUES(8,'banana',5) GO INSERT INTO stuff VALUES(9,'grape',6) GO
CREATE FUNCTION lookupone(@parent INTEGER) RETURNS VARCHAR(8000) AS BEGIN DECLARE @id INTEGER DECLARE @idlist VARCHAR(8000) SET @idlist = '' DECLARE c CURSOR FOR SELECT id FROM stuff WHERE parent = @parent OPEN c FETCH NEXT FROM c INTO @id WHILE @@FETCH_STATUS = 0 BEGIN SET @idlist = @idlist + ',' + CAST(@id AS VARCHAR(9)) + dbo.lookupone(@id) FETCH NEXT FROM c INTO @id END CLOSE c DEALLOCATE c RETURN @idlist END GO
CREATE PROCEDURE lookup(@name varchar(50)) AS BEGIN DECLARE @id INTEGER DECLARE @idlist VARCHAR(8000) DECLARE @sql VARCHAR(8000) SET @id = (SELECT id FROM stuff WHERE name = @name) SET @idlist = CAST(@id AS VARCHAR(9)) + dbo.lookupone(@id) SET @sql = 'SELECT * FROM stuff WHERE id IN (' + @idlist + ')' EXEC(@sql) END GO
EXEC lookup 'tools' GO EXEC lookup 'fruits' GO
DROP PROCEDURE lookup GO DROP FUNCTION lookupone GO
DROP TABLE stuff GO
2005 style ----------
CREATE TABLE stuff (id INTEGER PRIMARY KEY,name VARCHAR(50),parent INTEGER) GO
INSERT INTO stuff VALUES(1,'tools',0) GO INSERT INTO stuff VALUES(2,'hammer',1) GO INSERT INTO stuff VALUES(3,'screwdriver',1) GO INSERT INTO stuff VALUES(4,'fruits',0) GO INSERT INTO stuff VALUES(5,'yellow fruits',4) GO INSERT INTO stuff VALUES(6,'green fruits',4) GO INSERT INTO stuff VALUES(7,'apple',6) GO INSERT INTO stuff VALUES(8,'banana',5) GO INSERT INTO stuff VALUES(9,'grape',6) GO
WITH x (id, name, parent) AS ( SELECT id,name,parent FROM stuff WHERE name = 'fruits' UNION ALL SELECT stuff.id,stuff.name,stuff.parent FROM stuff INNER JOIN x ON stuff.parent = x.id ) SELECT * FROM x GO
Arne du har ikke tilfældigvis lavet et asp / javascript, således man som admin kan tilknytte et produkt til en katagori. Tænkte på noget dynamisk dropdown.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.