03. marts 2005 - 19:47Der er
18 kommentarer og 2 løsninger
Multiple select
Jeg har en multiple dropdown-boks, hvor man kan vælge flere værdier. (Den udtrækker fra én tabel). Ved submit kommer man så over til en anden side, hvor der i en anden tabel skal findes de værdier som man har valgt og derefter skrive nogle andre data ud. Hvordan selecter jeg fra databasen ud fra hvad der er valgt?
Lad os sige, at man vælger Kategori 2 og 7, så skal den tage værdierne: 1001 og 1003 med og udtrække de data, der er i en anden tabel med disse tal som primærnøgle.
Men hvordan laver jeg SQL-sætningen, der hvor jeg vil udtrække? Hjææælp...
mon ikke noget i stilen af dette kan gøre det: <% form = request.form("Kategori") myarr = split(form, ", ")
sql = "SELECT * FROM tabel" if UBound(myarr) > 0 then sql = sql & " WHERE kategori = " & myarr(0) if UBound(myarr) > 1 then for i = 1 to UBound(myarr) sql = sql & " OR kategori = " & myarr(i) next end if end if %>
Den skriver underligt nok alle kategorier ud lige meget hvad man vælger. Jeg havde også prøvet at lave et array, men den gjorde det samme - så jeg ved ikke hvad der går galt????
Så prøv at uskrive request.form("Kategori") og se den indeholder de kategorier der er valgt eller udskrive SQL sætningen for at se den bliver bygget rigtig ud.
Det ser ud til, at det er i sql-sætningen, at der er noget galt. Men jeg tror, at jeg siger tak for i dag til de 2 herrer. Jeg vender tilbage med points og evt. spørgsmål senere ...
Det er meget underligt for, det er kun hvis jeg vælger 3 eller derover i multi-select boksen, at det virker.
Hvis jeg kun vælger 1, udskrives sql-sætningen som SELECT * FROM tbKatagori (og dermed udskrives alt)
Hvis jeg vælger 2, tages kun den ene værdi med SELECT * FROM tbKatagori where Katagori = 1000
Men hvis jeg vælger 3 udskrives følgende: SELECT * FROM tbKatagori WHERE Katagori = 1000 OR Katagori = 10007 OR Katagori = 1001
Hvordan kan den det?
Det er ikke sikkert at væriderne findes i den anden tabel. Men hvis de gør skal overskriften til den enkelte kategorien udskrives og så noget indhold fra et andet felt nedenunder. Hvis en eller flere af kategorierne ikke findes skal den skrive overskriften til kategorien og derunder "Ingen poster fundet".
Jeg har indsat if not rs.eof then ... else response.Write "Ingen poster fundet"
Men sætningen skrives kun en gang, selv om der er flere poster, der ikke findes. Den skal skrive det under hvert enkelt. Hvor mon jeg kan sætte dette ind?
Så er vi ved at være der med den første problemstilling:
sql = "SELECT * FROM tbKategori" sql = sql & " WHERE Kategori = " & myarr(0) if UBound(myarr) > 0 then for i = 1 to UBound(myarr) sql = sql & " OR Kategori = " & myarr(i)
Dette virker hos mig, men ellebaek du har ledt mig godt på vej.. undrer mig dog lidt over, at din version virker???
Jeg arbejder lige lidt videre med det andet.... (jeg skal nok huske pointene :)
Læg venligst et svar, så er der point til jer begge.
Jeg har oprettet et nyt spøgsmål med en ny problemstilling her(http://www.eksperten.dk/spm/597329). Spørgsmålet relaterer sig til ovenstående, så det kan være, at I har gode forudsætninger for at kunne hjælpe.
form = request.form("Kategori") myarr = split(form, ",")
sql = "SELECT * FROM tabel" for i = 1 to UBound(myarr) if sqlWhere <> "" then sqlWhere = sqlWhere " OR " sqlWhere = sqlWhere & " kategori = " & trim(myarr(i)) next if sqlWhere <> "" then sql = sql & " WHERE " & sqlWhere
hehe, og jo, er måske lidt mærkeligt at den virker, men det gør den faktisk, også selvom jeg kun vælger 1 eller 2 fra boxen, og faktisk også helt uden noget valg..
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.