Avatar billede gatez Nybegynder
28. maj 2003 - 22:23 Der er 15 kommentarer og
1 løsning

Poll I ASP

Hejsa,

Jeg er ved at lave et afstemnings system... Og det skal laves på en lidt mærklig måde :-)

Jeg har en database med en Tabel der hedder Biler... Der er 500 biler vil jeg tro... Nu skal jeg bare lave et afstemnings system så man kan stemme på hver bil.
Derfor opretter jeg en tabel mere der hedder poll den indeholder så 13 koloner: ID, BilID, BrugerID 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Det er så meningen at når en person går ind under en valgt bil så skal han kunne stemme på den fra 1-10. Hver stemme skal have sit eget ID. Hvis en person stemmer så skal den gemme ID på den bil han har stemt på og hans eget Bruger ID samt hvilken stemme han giver Fx. "True" i 8 det vil sige hat han har givet bilen et 8 tal...
Nu kommer det svære så... At vise resutatet. Der skal den jo hente alle stemmer i tabelen "Poll" hvor bilens ID står i kolonen der hedder "BilID" ud fra det skal den regne det om til gennemsnit og vise det som fx. 8,64..
Lad os bare sige der er 2 stemmer: 1=True & 10=True så er resutatet jo 5,00 i snit... Hvordan hiver jeg det sådan ud af databasen ?

MVH
Brian Jørgensen
Avatar billede eagleeye Praktikant
28. maj 2003 - 22:34 #1
Jeg vil tillade at kommentere dit design. Det vil blive umiligt at udregne da man skal finde ud af hvilken kolonnne 1..10 der er kryds i for at finde ud af hvilken karakte en bruger har afgivet.

Hvis jeg må forslå en ændring som stadig gemmer brugerID, men lav kolonnerne 1..10 om til en kolonne som du kan kalde karakter. Når en bruger stemmer gemmer du karakteren 1->10 i kolonne.

Så kan du også let få databasen til at udregne gennem snittet med Avg(kolonne)
Avatar billede gatez Nybegynder
28. maj 2003 - 22:39 #2
Ok... Hvis det kan lade sig gøre... Det er fordi man skal kunne se under hver bil det snit der er stemt altså fx. 8,54 eller hvad det nu er... Og så skal man kunne se hvilke bruger der har stemt hvad altså man skal også kunne se en liste over alle brugere der har stemt på bilen og hvad de har givet af stemme hvis det kan lade sig gøre på den måde... Hvad vil det sige med: Avg(Kolonne) ?
Lige nu køre jeg Access database men regner med snart at lave det om til MySql...
Avatar billede eagleeye Praktikant
28. maj 2003 - 22:44 #3
avg er en function som kan regne gennemsnittet ud i en kolonne eks hvis ´to har stemt på 2 og 4 så er bliver avg(kolonnanvet) = 3

Den virker både i Access og mySQL.


Det andet er ikke umuligt, men jeg syntes du skal overvje at lave det med 4 kolonner som beskrevet.

ID  bilID  userID  karakter
1  1        2      2
2  1      87      4


Så kan man bruge en SQL sætning til at udregne gennemsnittet:

SQL = "SELECT avg(karakter) as snit from stemmer WHERE bilID = 1"
Avatar billede eagleeye Praktikant
28. maj 2003 - 22:47 #4
Den anden måde er man nød til at hendte alle stemmer og så loop gennem recordset og ligge stememrne samme når man finder true i en kolonne

SQL = "SELECT * FROM stemmer WHERE bilID = 1"

karakter = 0
stemmer = 0
do while rs.EOF
  stemmer = stemmer +1
  if rs("1") = true then karakter = karakter +1
  if rs("2") = true then karakter = karakter +2
  if rs("3") = true then karakter = karakter +3

  if rs("10") = true then karakter = karakter +10
  rs.Movenext
loop

snit =  karakter/stemmer
Avatar billede gatez Nybegynder
28. maj 2003 - 22:50 #5
--> eagleeye
Det er rigtigt... Det da en meget nemmere løsning... Takker! :-)

Jeg kigger lige på det i morgen og giver dig point der for jeg har nok lige et spørgsmål mere :-)

Vi snakkes i morgen...
Avatar billede gatez Nybegynder
28. maj 2003 - 22:51 #6
--> eagleeye

Det er den første løsning du skrev jeg bedst kan lide... Men jeg kigger på det i morgen...
Avatar billede eagleeye Praktikant
28. maj 2003 - 22:52 #7
Ok ;) vi ses i morgen.
Avatar billede gatez Nybegynder
29. maj 2003 - 14:57 #8
--> eagleeye

Hey... Er du på nu ?
Avatar billede eagleeye Praktikant
29. maj 2003 - 14:58 #9
Ja.
Avatar billede gatez Nybegynder
29. maj 2003 - 15:01 #10
Jeg har fået det til at virke (Næsten) såden:

<%
Set Conn2 = Server.CreateObject("ADODB.Connection")
Conn2.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.Mappath("../database/bodykits.dk/brugersystem.mdb")
Set rs1 = Conn2.Execute("SELECT * from BilPoll WHERE BilID = '" & intID & "'")
Set rs2 = Conn2.Execute("SELECT avg(Stemmer) as snit from BilPoll WHERE BilID = '" & intID & "'")
str2Stemmer =left(RS2("Snit"), 4)
str1BrugerId = RS1("BrugerId")
str1BilId = RS1("BilId")
rs2.Close
rs1.Close
%>
<%
BilId = Request.QueryString("id")
if str1BrugerId = intBrugerId and str1BilId = BilId then
Response.write "" & str2Stemmer
else
Response.write "Du skal stemme."
end if
%>

Men det skal jo være sådan at hver bruger kun kan stemme 1 gang på hver bil... Jeg har forsøgt at lave noget som du kan se men det virker ikke som det skal...
Der hvor jeg henter "str1BrugerId" der udskriver den kun det ID på den FØSTE stemme i tabelen... Men den skal jo undersøge alle stemmerne...

Hjælp :-)
Avatar billede eagleeye Praktikant
29. maj 2003 - 15:05 #11
Du kan lave en SQL som tjekker om en bruger har stemt på bilen før ved:

SQL = "SELECT * from BilPoll WHERE BilID = '" & intID & "' AND brugerID = '" & intBrugerID & "'"
Set rs_tjek = Conn2.Execute(SQL)

if rs_tjek.EOF then
  'Brugeren har ikke stem og stemmen skal gemmes

else
  'Brugeren har stemt

end if
Avatar billede gatez Nybegynder
29. maj 2003 - 15:14 #12
2 sec... Jeg arbejder lige på det :-)
Avatar billede gatez Nybegynder
29. maj 2003 - 15:29 #13
Yeps det virke sku :-) Takker !!!
Smid lige et "Svar" så du kan få dine point...
Avatar billede eagleeye Praktikant
29. maj 2003 - 15:38 #14
OK ;)
Avatar billede gatez Nybegynder
29. maj 2003 - 15:39 #15
10000000000000 Tak :-)
Avatar billede gatez Nybegynder
04. juli 2003 - 14:38 #16
Virker det her ikke i MySQL ?
Den regner godt nok et snit ud men kun i en desimal, altså fx.: 5 og ikke 5,67
Hvad skal ændres ?

Set rs = Conn.Execute("SELECT avg(Stemmer) as snit from bilpoll WHERE BilID = '" & intID_Bil & "'")
strStemmerSnit =left(RS("Snit"), 4)
strStemmerSnitEnD =left(RS("Snit"), 1)
rs.Close
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