19. marts 2006 - 12:48Der er
47 kommentarer og 1 løsning
Dim af variabler plus ORDER BY og ASC/DESC
Jeg er ved at lave en mulighed for valg af visning. Jeg kaver et udtræk fra DB, kører det igennem en løkke, og får listet alle de registrerede brugere.
Øverst har jeg 2 select-bokse, så man har mulighed for at vist udtrækkede i den orden, som man ønsker det: Sorter efter ID/Brugernavn/Navn/Oprettet/Sidst set plus en select-box med Stigende/Faldende.
<% Dim RS SQL = "SELECT userID, username, firstname, middlename, lastname, lastseen, created, chooseview, xChooseorder FROM backendusersitg ORDER BY username" '<-- HER ER SAGENS KERNE Set RS = Conn.Execute(SQL)
<select size="1" name="chooseview" class="input1"> <option selected>Vælg</option> <option value="1"<% If qChooseview = 1 Then %> selected<% End If %>>ID</option> <option value="2"<% If qChooseview = 2 Then %> selected<% End If %>>Brugernavn</option> <option value="3"<% If qChooseview = 3 Then %> selected<% End If %>>Navn</option> <option value="4"<% If qChooseview = 4 Then %> selected<% End If %>>Oprettet</option> </select>
<select size="1" name="chooseorder" class="input1"> <option selected>Vælg</option> <option value="1"<% If qChooseorder = 1 Then %> selected<% End If %>>Stigende</option> <option value="2"<% If qChooseorder = 2 Then %> selected<% End If %>>Faldende</option> </select>
</body>
</html>
Den del, hvor brugeren kan gemme sine valg i databasen, virker fint nok. Hvis der f.eks. vælges sortering efter navn/stigende, gemmes det korrekt i DB, og brugerens valg er hele tiden i de 2 select-bokse, hver gang han går ind på siden (cookie-fri funktion). Mit spørgsmål går på hvordan jeg får det flettet ind i min SQL-forespørgsel:
SQL = "SELECT userID, username, firstname, middlename, lastname, lastseen, created, chooseview, xChooseorder FROM backendusersitg ORDER BY username"
Jeg har endnu ikke forsøgt at sætte noget ind i sætningen, der mangler også ASC eller DESC. Men det skyldes jo netop, at det er en del af problemet.
Jeg synes det er lidt tricky at lave, eftersom jeg ikke har mulighed for at dimensionere valgene, og ud fra det sætte det ind i SQL-forespørgslen. Skal der længere oppe laves en SQL-forespørgsel, så det er muligt at angive hvordan det skal trækkes ud af DB, eller hvordan? Håber på noget brugbart i dag :o)
Jeg ville lave en tabel som indeholder to kolonner et med id 1,2,3,4 og så tilsvare kolonnenavne ID, Brugernavn, Navn, Oprettet så du med et opslag kan konvertere qChooseview til et brugbart navn. Ligeledes en tabel til qChooseorder som indeholder id 1,2 og sortorder ASC, DESC
Så kan du hente kolonnenavn og sort order ud på denne måde ud fra username:
SQL = "SELECT tkn.kolnavn, tso.sortorder FROM (kolonnenavne tkn INNER JOIN MinTabel ON tkn.id = MinTabel.chooseview) INNER JOIN sortordre tso ON MinTabel.xChooseorder = tso.id WHERE username = '" & SQLEncode(Session("username")) & "'"
Du kan også bruge den til at hente xChooseorder, chooseview på samme tid, det ser ud som om du bruger de to til at lave selecten:
SQL = "SELECT tkn.kolnavn, tso.sortorder, chooseview, xChooseorder FROM (kolonnenavne tkn INNER JOIN MinTabel ON tkn.id = MinTabel.chooseview) INNER JOIN sortordre tso ON MinTabel.xChooseorder = tso.id WHERE username = '" & SQLEncode(Session("username")) & "'"
Så koden bliver til stil med:
<% Dim qUser, qChooseview, qChooseorder
'finder først sort kolonne og order da det kal bruges i næste sql sætning SQL = "SELECT tkn.kolnavn, tso.sortorder, chooseview, xChooseorder FROM (kolonnenavne tkn INNER JOIN MinTabel ON tkn.id = MinTabel.chooseview) INNER JOIN sortordre tso ON MinTabel.xChooseorder = tso.id WHERE username = '" & SQLEncode(Session("username")) & "'"
set rs = Conn.Execute(SQL) if not rs.EOF qUser = RS("username") qChooseview = RS("chooseview") qChooseorder = RS("xChooseorder") qOrderBy = RS("kolnavn") & " " & RS("sortorder") else 'ingen var valgt default sætte her: qChooseview = 1 qChooseorder = 1 qOrderBy = "ID ASC" end if
SQL = "SELECT userID, username, firstname, middlename, lastname, lastseen, created, chooseview, xChooseorder FROM backendusersitg ORDER BY " & qOrderBy Set RS = Conn.Execute(SQL)
Den SQL du har smider ikke data ind men opdater data: strSQL = "UPDATE backendusersid SET selectid='" & Trim(SQLEncode(Request.Form("selectid"))) & "', selectname='" & Trim(SQLEncode(Request.Form("selectname"))) & "'"
Skal du havde indsat data skal det være med en Insert into:
Jeg burde have brugt dine navne, men jeg prøver lige om jeg kan hitte ud af denne:
'finder først sort kolonne og order da det kal bruges i næste sql sætning SQL = "SELECT tkn.kolnavn, tso.sortorder, chooseview, xChooseorder FROM (kolonnenavne tkn INNER JOIN MinTabel ON tkn.id = MinTabel.chooseview) INNER JOIN sortordre tso ON MinTabel.xChooseorder = tso.id WHERE username = '" & SQLEncode(Session("username")) & "'"
For det er den næste, der skal bruges, ikke? Det første eksempel var uden at hente at hente xChooseorder, chooseview?
Ja hvis du skal bruge xChooseorder, chooseview er det nr2. Så skal kolonne og tabel navne lige rettes lidt til:
'finder først sort kolonne og order da det kal bruges i næste sql sætning SQL = "SELECT tkn.selectname, tso.ascdesc, chooseview, xChooseorder FROM (backendusersid tkn INNER JOIN MinTabel ON tkn.selectid = MinTabel.chooseview) INNER JOIN backendusersascdesc tso ON MinTabel.xChooseorder = tso.ascdescid WHERE username = '" & SQLEncode(Session("username")) & "'"
ok det så fordi username ikke er med i select ... from. Hvis du skal bruger username i qUser så prøv at tilføje kolonnen username til SQL sætningen sådan her:
SQL = "SELECT tkn.selectname, tso.ascdesc, chooseview, xChooseorder, username FROM ...
men i princippet har du username i session variablen så det kunne vel lige så godt være:
Det som går galt er indholdet af tabellen backendusersid helt præsist kolonne selectname. Den kolonne skal indeholde navne på de kolonner man skal kunne sortere på.
Det er denne SQL sætning som skal sorters:
SQL = "SELECT userID, username, firstname, middlename, lastname, lastseen, created, chooseview, xChooseorder FROM backendusersitg ORDER BY " & qOrderBy Set RS = Conn.Execute(SQL) '<-- Linie 54
Altså skal kolonne selectname indeholde det som er vist 21/03-2006 00:11:35
og så kan du også lave dine <select> bokse ud fra tabllen backendusersid så den viser de kolonenr ud har valgt man kan vælge via tabllen backendusersid :)
TAK, eagleeye. Du har mere end gjort dagens gode gerning. Brugte en stor del af weekenden på det her småtteri, som ikke er småtteri alligevel. Tak for hjælpen, og sov godt :o)
eagleeye, der er lige et lille følge-problem, håber du har mod på lige at hjælpe med denne også:
Det er jo meningen med visningen af disse brugere, at administrator kan tilføje/rettigheder til visse funktioner, men qUser = RS("username") er jo smuttet. Du får hele løkken:
Det er jo fordi, at de ovenstående SQL-forespørgsler er beregnet på den sortering, som administratoren vælger. Der er ikke noget, der hiver data for brugerne ud af DB. Dvs. jeg skal have sat det ind igen på en eller anden måde ...
eagleeye, du skal have 1000 tak for din indsats. Du har - som sædvanlig - gjort en stor indsats, jeg er utrolig glad for din hjælp :)
Synes godt om
Ny brugerNybegynder
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.