26. juli 2001 - 09:23Der er
7 kommentarer og 1 løsning
SQL-sætning der tæller hvormange variabler der er adskilt med komma???
Jeg har en tabel hvor der kommer data i fra en online spørgeundersøgelse. Alle svar kommer ind i en database i et felt der hedder \"svar\". Hvis en respondent svarer to svar (multiple answers) på samme spørgsmål kommer værdierne ind i databasen i samme felt adskilt med komma. Hvordan kan jeg tælle hvormange svar der ialt er givet (ikke hvormange respondenter der har svaret - eks. hvis jeg har svaret \"blå\" og \"gul\" så er antal svar = 2, men som respondent tæller jeg kun én).
Hvordan tæller jeg antal svar op i en SQL-sætning - eller kan jeg få min database til at gøre det i en støttetabel feks.???
Enten må du lave din databasestruktur om, så hvert svar til et spørgsmål bliver lagret for sig, eller du må lave en funktion, som tæller antal kommaer og lægger 1 til.
Ved sidstnævnte metode vil \"Blå, Gul og Rød\" dog stadig fremtræde som 2 svar: \"Blå\" og \"Gul og Rød\"
Optimalt vil være følgende struktur for dine tabeller: Respondenter: data om personer Spørgsmål: Nummer og tekst på spørgsmål Svar: alle de svar, som er indkommet (1 ad gangen) (med fremmednøgler til de 2 øvrige tabeller)
osv. Har han valgt nummer 1, 4 og 5, så gemmer du 1+8+16 i et talfelt. Derefter kan du i en forespørgsel i MySql bruge BIT_COUNT funktionen til at tælle hvor mange svar han har givet.
Kanon svar synes jeg, men hvordan laver jeg funktionen til dette - skal den laves i databasen eller via scripting i ASP-filen? Kan man ikke gøre det via et SQL-udtryk som jeg alligevel bruger til at hente data med?
<code>If \"\" <> Request.QueryString(\"id\") then If \"\" = Request.QueryString(\"mode\") then Sql = \"Select * from T_Vote where Id = \" & Request.QueryString(\"Id\") Set Record = Rs.Execute(Sql) Dim Valg(5) valg(1) = Record(\"valg1\") valg(2) = Record(\"valg2\") valg(3) = Record(\"valg3\") valg(4) = Record(\"valg4\") valg(5) = Record(\"valg5\")
response.write font & Record(\"Beskrivelse\") & \"<br><br>\"
Sql = \"Select count(*) as Found from T_VoteResult where VoteId = \" & Request.QueryString(\"Id\") Set Record = Rs.Execute(Sql) Ialt = Record(\"found\")
Response.Write \"<div align=\'left\'><table border=\'0\'><tr>\" For i = 1 to 5 If valg(i) <> \"\" then Sql = \"Select Count(*) as Found from T_VoteResult where VoteId = \" & Request.QueryString(\"Id\") & \" and vote like \'%\" & Valg(i) & \"%\'\" Set Record = Rs.Execute(Sql) Procent = 100/Ialt * Record(\"Found\") \' response.write Ialt
response.write \"<td>\" & font & Valg(i) & \"</td><td>\" & font & Round(procent) & \"%</td><td><hr width=\'\" & Procent * faktor & \"\' size=\'10\' align=\'left\' color=\'\" & barcolor & \"\'></td></tr>\" end if Next Response.Write \"</table></div>\" end if</code>
Ingen kan tilsyneladende hjælpe, tager pointene selv.
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.