27. marts 2007 - 13:26Der er
19 kommentarer og 1 løsning
Sortere indhold fra db
Hej Eksperter, Jeg har 18 felter i min db, kaldet 1hcp, 2hcp, 3hcp osv.
Disse felter indeholder tallet 1-18 Hvordan kan jeg udlæse med til 18 variabler kaldet a1, a2, a3 osv men a1 skal indeholde tallet 1, a2 skal indeholde tallet 2 osv.
Indholdet af de 18 felter i db er selvfølgelig forskellige fra gang til gang
Du bør benytte et array til at holde data efter udlæsning. Det er lettere at arbejde videre med et array og det er lavet til den slags opgaver.
dim a(17)
set conn = Server.CreateObject("ADODB.Connection") conn.open dinConnectionString sql = "select * from tabel" set rs = conn.execute(sql) if not rs.eof then for i = 0 to 17 a(i) = rs(i+1 & "hcp") next end if rs.close set rs = nothing conn.close set conn = nothing
for i = 0 to 17 response.write i & " = " & a(i) next
Aha! Så skal data jo sorteres efter de er hentet... hmmm... en lille bubblesort burde kunne løse den opgave.
function bubblesort(arr) dim tmp, i, j for j = (ubound(arr) - 1) to 1 step -1 for i = 0 to j if arr(i) > arr(i+1) then tmp = arr(i) arr(i) = arr(i+1) arr(i+1) = tmp end if next next bubblesort = arr end function
dim a(17)
set conn = Server.CreateObject("ADODB.Connection") conn.open dinConnectionString sql = "select * from tabel" set rs = conn.execute(sql) if not rs.eof then for i = 0 to 17 a(i) = rs(i+1 & "hcp") next end if rs.close set rs = nothing conn.close set conn = nothing
a = bubblesort(a)
for i = 0 to 17 response.write i & " = " & a(i) next
Hvis man lige skal kaste sig selv overbord, så kan man jo udvide bubblesort-funktionen med en parameter, så man kan bestemme om sorteringen skal være stigende eller faldende:
function bubblesort(arr,dir) dim tmp, i, j for j = (ubound(arr) - 1) to 1 step -1 for i = 0 to j if (arr(i) * dir) > (arr(i+1) * dir) then tmp = arr(i) arr(i) = arr(i+1) arr(i+1) = tmp end if next next bubblesort = arr end function
' sorter stigende a = bubblesort(a,1)
' sorter faldende a = bubblesort(a,-1)
Dette fungerer naturligvis kun hvis a indeholder tal.
Så får jeg en type mismatch, i denne linie: a = bubblesort(a)
function bubblesort(arr) dim tmp, i, j for j = (ubound(arr) - 1) to 1 step -1 for i = 0 to j if arr(i) > arr(i+1) then tmp = arr(i) arr(i) = arr(i+1) arr(i+1) = tmp end if next next bubblesort = arr end function
dim a(17)
Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("dkgolf.mdb") Conn.Open DSN sql="select * from baner where banenavn='"&request("retter1") &"'" set rs1a=conn.execute(sql) if not rs1a.eof then for i = 0 to 17 a(i) = rs1a(i+1 & "hcp") next end if
a = bubblesort(a)
for i = 0 to 17 response.write i & " = " & a(i) next
Hmm... jeg er lidt forvirret over hvilke data der hører til hvor, men umiddelbart synes jeg det må være data i din database der ikke er korrekte (eller det regelsæt du har opstillet her i tråden som ikke er forstået helt). Hvilke data der fyldes i array'et er jeg ikke herre over, men jeg kan hjælpe dig med at få dem sorteret i numerisk rækkefølge (dvs. det troede jeg da :)).
Spørgsmålet er om sorteringsrutinen ikke bliver helt færdig med at sortere siden der hænger et ettal helt dernede ved hul 16, men ellers synes jeg det ser ud til at fungere.
Jeg spekulerede på om du har skrevet point1 i stedet for point16 ud for hul 16...? Eller om du har overført den forkerte værdi til point16...?
Vis evt. den kode som overfører værdierne eller i det hele taget den kode der ligger til grund for genereringen af scorekortet.
...og de 12 point på hul 12 går igen fordi, der med de givne slag og handicap, sammenholdt med hullets par ikke giver nogle point. Derfor skal den akkumulerede score ikke ændre sig for dette hul.
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.