Avatar billede mskjoldp Novice
18. januar 2006 - 07:20 Der er 6 kommentarer og
1 løsning

sortering af array

Hey E

ASP/IIS/Access/IE

fra db hentes feltet: style1, der indeholder id på opgaver i en tabel, fx i style1 står der 2;5;22;23;27; hvilket betyder at brugeren har valgt at se opgave nr 2 5 22 23 og 27.
....kode...:
If not rsUser.EOF Then
strIndhold = rsUser("style1")
End If
hvilken = Split(strIndhold,";")

så vises de valgt opgaver:
først med en overskrift hvorpå man (bør kunne) sorterer på teksten:
..kode...:
bla bla layout....
for each x in rsDB.fields
xname = x.name
newsort = Replace(Request.QueryString("SC"),"'","''")
if newsort = "desc" then
newsort = "asc"
else
newsort = "desc"
end if
%>
<td id="overskrift">
<a href="wms.asp?mode=opgaver&sort=<%=(x.name)%>&SC=<%=newsort%>"><%="&nbsp;" & xname%></a>
</td>
<%next %>

så med selve dbindholdet:
bla bla layout....
for b = 0 to ubound(hvilken)
if hvilken(b) <> "" then
Set rs = Conn.Execute("SELECT * FROM opgaver WHERE Auto_opg_id=" & hvilken(b) & " ORDER BY " & sortering & " " & newsort )
bla bla layout....
Dette virker ok, alt bliver præsenteret korrekt, men jeg kan ikke sortere. mine variabler; sortering og newsort får de rigtige indput og ændres korrekt i SELECT statment. Problemet er at rækkefølgen altid er som indholdet i style1, fx: 2;5;22;23;27;

hvordan sorterer jeg via overskrifterne når rækkefølgen er bestemt af style1?
Avatar billede nielle Nybegynder
18. januar 2006 - 08:44 #1
Hvis du laver lidt om på dine data, sådan at style1 feltet indeholder "2,5,22,23,27" i stedet for "2;5;22;23;27;", så kan du klare problemet med SQL's IN-syntaks:

Set rs = Conn.Execute("SELECT * FROM opgaver WHERE Auto_opg_id IN (" & rsUser("style1") & ") ORDER BY " & sortering & " " & newsort

I stedet for at bruge din loop over "For b = 0 To UBound(hvilken)" så kan du nu loope over alle de værdier der kommer ud af denne SELECT. Foruden at du får din sortering på plads, så er dette også mere effektivt end at udføre en SELECT på hvert element i "hvilken" arrayet. :^)
Avatar billede mskjoldp Novice
18. januar 2006 - 21:27 #2
aha... det må jeg lige prøve, men hvordan ser et loop ud over de værdier der kommer ud af en IN syntaks? et mini eks. vil hjælpe mig på vej.
Avatar billede nielle Nybegynder
18. januar 2006 - 21:32 #3
På samme måde som for enhver anden SELECT som kan give flere end 1 værdi:

Set rs = Conn.Execute("SELECT * FROM opgaver WHERE Auto_opg_id IN (" & rsUser("style1") & ") ORDER BY " & sortering & " " & newsort

While Not rs,EoF
    Reposne.Write rs("Auto_opg_id") & "<br>"
    rs.MoveNext
Loop
Avatar billede mskjoldp Novice
18. januar 2006 - 21:37 #4
jammen jammen, det er jo nice nice nice.
SQL lyder nu:
strSQL = "SELECT * FROM opgaver WHERE Auto_opg_id IN (" & strIndhold & ") ORDER BY " & sortering & " " & newsort

nielle svar plz :)
Avatar billede nielle Nybegynder
18. januar 2006 - 21:41 #5
Svar :^)
Avatar billede mskjoldp Novice
18. januar 2006 - 22:20 #6
takker
Avatar billede nielle Nybegynder
18. januar 2006 - 22:38 #7
I lige måde :^)
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