01. maj 2008 - 17:28Der er
8 kommentarer og 2 løsninger
Dynamisk opbygning af SELECT?
Hejsa Spørgsmålet er oprettet her, da jeg forventer nedenstående skal løses med nogle hjælpefunktioner i ASP.
Problemet: Jeg har en tabel med en masse tekster i (items hedder tabellen), disse refererer med et kategori id (katid hedder feltet) til en anden tabel (kategorier hedder den tabel), hvor katagorierne er i.
kategoritabellen har denne opbygning: id parent kategori 1 0 HovedkategoriA 2 0 HovedkategoriB 3 2 UnderkategoriA til hovedkategoriB 4 2 UnderkategoriB til hovedkategoriB 5 2 UnderkategoriC til hovedkategoriB 6 4 UnderkategoriA til underkategoriB også videre...
Hvordan får jeg bygget en SELECT sammen til items, hvor jeg får alle poster der matcher en kategori og alle dennes tilhørende underkategori?
Altså hvis jeg kommer med katid = 2, skal jeg ud fra det have opbygget en SELECT ned i items:
SELECT * FROM items WHERE (katid = 2 OR katid = 3 OR katid = 4 OR katid = 5 OR katid = 6)
Så jeg får alle de poster der matcher kategorien 2 eller en af dennes underkategorier.
Hvis jeg fx var kommet med katid = 4, skal resultatet være: SELECT * FROM items WHERE (katid = 4 OR katid = 6)
Hvis jeg fx var kommet med katid = 3, skal resultatet være: SELECT * FROM items WHERE (katid = 3)
Er spørgsmålet til at forstå? Håber der er en eller flere der kan hjælpe.
Så fik jeg lavet en lille funktion der kan give mig alle ID på en kategories underpunkter i n niveauer. Listen brugerne jeg så til at danne SQL'en med senere
Til dem der måtte have gavn af det, så er funktionen her:
strIDList = getIDListForSubCategories(2, 1, 1)
Function getIDListForSubCategories(strKatIDs, blnRecoursiv, blnReturnStartValue) 'Find ID på alle de underkategorier den eller de medsendte kategori har
strTempIDList = "" strFinalIDList = ""
'Split den medsendte streng i ID'erog løb dem igennem arrayOfIDs = split(strKatIDs,",") for i = 0 to ubound(arrayOfIDs) 'Select alle de kategorier der er underkategori til den aktuelle kategori strSQL = "SELECT * FROM kategorier WHERE parentid = " & arrayOfIDs(i) & "" Set rsKats = Conn.Execute(strSQL)
'Gem den fundne, men tjek først om startværdien skal returneres if blnReturnStartValue = 1 then if strFinalIDList <> "" then strFinalIDList = strFinalIDList & "," & arrayOfIDs(i) else strFinalIDList = arrayOfIDs(i) end if end if
'Opsammel ID på underkategorierne, så vi kan tjekke om de har underkategorier If Not rsKats.EOF Or rsKats.BOF Then Do until rsKats.EOF if strTempIDList <> "" then strTempIDList = strTempIDList & "," & rsKats("id") else strTempIDList = rsKats("id") end if rsKats.MoveNext Loop End if next if blnRecoursiv = 1 then if strTempIDList <> "" then 'Kald igen med underkategorierne for at få deres underkategorier strFinalIDList = strFinalIDList & "," & getIDListForSubCategories(strTempIDList,blnRecoursiv,1) end if else strFinalIDList = strTempIDList end if getIDListForSubCategories = strFinalIDList End Function
bondester: Smid et svar så deler vi, jeg bruger en del af det du skrev til efterfølgende at lave SQL'en
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.