Avatar billede rar_jacobsen Nybegynder
26. februar 2006 - 14:06 Der er 7 kommentarer og
1 løsning

Brug af database

Hej

Jeg har en database hvor jeg godt kunne tænke mig at genere en liste ud fra / placering ud fra.
Den ser ud som følger:

ID  NAME  CATEGORY  PARENT
1  Name1    1      0
2  Name2    1      0
3  Name3    1      0
4  Name4    0      0
5  Name5    1      1
6  Name6    1      2
7  Name7    1      5
8  Name8    1      0
9  Name9    1      5

Listen skal så gerne se ud som flg.

Name1
Name1 / Name5
Name1 / Name5 / Name7
Name1 / Name5 / Name9
Name2
Name2 / Name6
Name3
Name7

Det er kun hvis der står 1 i CATEGORY kolonnen at dataerne skal med.

Er der nogen som kan hjælpe mig?
Avatar billede rar_jacobsen Nybegynder
26. februar 2006 - 14:11 #1
Jeg er selvfølgelig også gerne åben for ændringer til databsen hvis det er det som skal til

Jeg ved ikke om det kan gøre det, men jeg har hørt noget om GROUP BY, kender det bare ikke selv
Avatar billede eagleeye Praktikant
26. februar 2006 - 17:02 #2
Din database opbygning er som den skal være. Du skal havde gang i en rekrisiv funktion og dit problem er i pricippet det samme om dette:
http://www.html.dk/scripts/asp/00015/


Jeg har prøvet at rette koden til så den passer med det output du ønsker, men du skal stadig lige rette conenction string og sql sætning så tabellen passer. Jeg har brugt to funktioner den ene finder "stien" fra parent til et bestemt ID. Den anden looper igenne ID'erne og tjekker om der er match imellem ID og parentID.

<%
Set rs = Server.CreateObject("ADODB.RecordSet")
Set conn = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.Mappath("db1.mdb")
conn.Open strDSN

sql = "SELECT * FROM spm691029 WHERE Category=1"
Set rs = conn.Execute(sql)

do while not rs.eof
  ' Gem data som kommasepareret liste
  arrID = arrID & "," & rs("ID")
  arrRE = arrRE & "," & rs("parent")
  arrSU = arrSU & "," & rs("name")
  rs.MoveNext
Loop

' Lav arrays med data
arrID = Split(arrID,",")
arrRE = Split(arrRE,",")
arrSU = Split(arrSU,",")

Rs.Close

'Funktion som finder path fra root til et ID
function breadcrumb(id)
  dim x
  for x= 1 to ubound(arrID)
    if int(id) = int(arrID(x)) then
      if int(arrRE(x))=0 then
        breadcrumb = "" & arrSU(x) & breadcrumb
      else
        breadcrumb = breadcrumb & breadcrumb(arrRE(x)) & " / " & arrSU(x)
      end if           
    end if
  next
end function

' Funktion som undersøger for svar
Function Threads(intID)   
  For m = 1 to Ubound(arrID)
    ' Hvis svar til det indlæg som funktionen er kaldt med
    If int(arrRE(m)) = int(intID) Then
      ' Tilføj til liste og kald funktionen for at undersøge for svar
      Threads = Threads & breadcrumb(arrID(m)) & "<br>" & Threads(arrID(m))
    End If
Next
End Function

' Kald funktionen med alle hovedindlæg
Response.Write Threads(0)
%>
Avatar billede rar_jacobsen Nybegynder
27. februar 2006 - 06:27 #3
Kanon, jeg er lige på vej ud af døren men jeg kigger på den når jeg kommer hjem i aften
Avatar billede rar_jacobsen Nybegynder
28. februar 2006 - 05:48 #4
Jeg får sådan en lille fætter her

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'arrRE(...)'
Avatar billede rar_jacobsen Nybegynder
28. februar 2006 - 12:35 #5
Den siger at den kommer i denne linie:

If int(arrRE(m)) = int(intID) Then
Avatar billede eagleeye Praktikant
28. februar 2006 - 18:57 #6
Er parent ikke en tal kolonne i databasen?
Avatar billede eagleeye Praktikant
28. februar 2006 - 19:09 #7
En mulighed kunne også være hvis parent kolonnen i en post er helt tom. Hvis der skulle havde stået 0 men parent er tom.
Avatar billede rar_jacobsen Nybegynder
01. marts 2006 - 09:45 #8
Jeg fandt selv løsningen på den fejl
Parent er en tekst kolonne da et child-record kan have flere parents, f.eks. "10,252" Men jeg har har lavet det om til 2 child-records til samme parent.

Ikke optimalt, men okay sådan er det. Medmindre du har et løsningsforslag til dette :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester