Avatar billede lund_dk Praktikant
20. maj 2006 - 15:39 Der er 27 kommentarer og
1 løsning

Beregn stemmer

Jeg har lavet dette script, for at beregne stemmer ud fra et billedes id.

Problemet er når jeg skal regne pointsummen fra databasen, får jeg ikke noget output hvis der nu slet ikke er stemt på et billede.
Dvs. i stedet for at have et tomt output, vil jeg have udskrevet et 0 i stedet,
hvordan klarer jeg dette?

Er nød til at have det nul, da jeg senere i scriptet laver gennemsnit og afkorter dicimaler.

SQL1 = "SELECT SUM(Rate) AS Votes FROM rates WHERE pictureID = " & rsPicture("ID") & ""
            Set RSVotes = Conn.Execute(SQL1)
            Votes = rsVotes("Votes")
            Set RSVotes=Nothing
            response.write "Votes:" & Votes & "<br>"
           
            strSQL = "SELECT COUNT(*) FROM rates WHERE pictureID = " & rsPicture("ID")
            Set Rs = conn.Execute (strSQL)
            count = Rs(0)
            Set RS=Nothing
            response.write "Count:" & Count & "<br>"
           
            Rate =  Votes / count
            Rate = FormatNumber(Rate,1)
Avatar billede cyberkox Nybegynder
20. maj 2006 - 17:05 #1
Noget i retningen af:

if rsvotes.eof then

votes = 0

end if
Avatar billede busschou Praktikant
20. maj 2006 - 17:06 #2
Du kan vel indsætte
....
if rs.eof or rs.bof then
  count = 0
else
  count = Rs(0)
end if
Avatar billede lund_dk Praktikant
20. maj 2006 - 17:15 #3
Nu har jeg sat det ind sådan her,men stadig det samme..

SQL1 = "SELECT SUM(Rate) AS Votes FROM rates WHERE pictureID = " & rsPicture("ID") & ""
            Set RSVotes = Conn.Execute(SQL1)
            'Votes = rsVotes("Votes")
            if rsVotes.eof or rsVotes.bof then
                Votes = 0
            else
                Votes = rsVotes("Votes")
            end if
            Set RSVotes=Nothing
Avatar billede cyberkox Nybegynder
20. maj 2006 - 19:09 #4
Her, du ska også gøre det ved Rates :-)

SQL1 = "SELECT SUM(Rate) AS Votes FROM rates WHERE pictureID = " & rsPicture("ID") & ""
            Set RSVotes = Conn.Execute(SQL1)
            'Votes = rsVotes("Votes")
            if rsVotes.eof or rsVotes.bof then
                Votes = 0
            else
                Votes = rsVotes(0)
            end if
            Set RSVotes=Nothing

            strSQL = "SELECT COUNT(*) FROM rates WHERE pictureID = " & rsPicture("ID")
            Set Rs = conn.Execute (strSQL)
if rs.eof or rs.bof then
  count = 0
else
  count = Rs(0)
end if
            Set RS=Nothing
            response.write "Count:" & Count & "<br>"
           
            Rate =  Votes / count
            Rate = FormatNumber(Rate,1)
Avatar billede nielle Nybegynder
20. maj 2006 - 19:29 #5
Hvis du kun er interesseret i gennemsnittet, så kan det gøres med en SQL-sætning:

SQL1 = "SELECT avg(Rate) AS gennemsnit FROM rates WHERE pictureID = " & rsPicture("ID")
Avatar billede cyberkox Nybegynder
20. maj 2006 - 19:41 #6
Men han vil jo gerne have alle tre ting :)

Antal Votes, rates og så hvor mange procent, der er rated pr. votes-mulighed, vel ?
Avatar billede lund_dk Praktikant
20. maj 2006 - 20:44 #7
Jeg får desværre stadig ikke noget 0 ud af denne, hvis ikke der er nogle stemmer..:s

Hvad gør jeg?

SQL1 = "SELECT SUM(Rate) AS Votes FROM rates WHERE pictureID = " & rsPicture("ID") & ""
            Set RSVotes = Conn.Execute(SQL1)
            'Votes = rsVotes("Votes")
            if rsVotes.eof or rsVotes.bof then
                Votes = 0
            else
                Votes = rsVotes(0)
            end if
            Set RSVotes=Nothing
Avatar billede lund_dk Praktikant
20. maj 2006 - 20:47 #8
nielle: Det er korrekt, jeg vil have hvor mange der har stemt på pågældende, så vil jeg have den samlet sum af points(Rates) og så vil beregne gennemsnittet på disse.
Avatar billede nielle Nybegynder
20. maj 2006 - 20:47 #9
Jeg er ret sikker på at det skyldes at der altid bliver returneret netop én række, men at værdien i Vodes blot er null. Prøv dette:

SQL1 = "SELECT SUM(Rate) AS Votes FROM rates WHERE pictureID = " & rsPicture("ID") & ""
Set RSVotes = Conn.Execute(SQL1)
Votes = "" & rsVotes("Votes")
If Votes = "" Then Votes = 0
Avatar billede lund_dk Praktikant
20. maj 2006 - 20:52 #10
Med det kode eksempel, så får jeg stadig ikke en værdi ud, hvis der ikke er nogle stemmer.
Men derimod får jeg værdien "FALSK" udskrevet ved billeder hvor der er stemmer.
Avatar billede lund_dk Praktikant
20. maj 2006 - 21:04 #11
jeg har afkortet det lidt, så nu har jeg denne kode

SQL1 = "SELECT SUM(Rate),COUNT(*) FROM rates WHERE pictureID = " & rsPicture("ID") & ""
            Set RsVotes =  Conn.Execute(SQL1)
            if rsVotes.eof or rsVotes.bof = "" then
              Votes = 0
            else
              Votes = rsVotes(0) / rsVotes(1)
            end if
           
            Votes = FormatNumber(Votes,1)

Men stadig samme problem, at jeg ikke kan få det 0 *suk*
Avatar billede nielle Nybegynder
20. maj 2006 - 21:06 #12
Prøv med koden fra 20/05-2006 20:47:46.
Avatar billede lund_dk Praktikant
20. maj 2006 - 21:12 #13
nielle: Den har jeg prøvet, hvor jeg skrev følgende til
"Med det kode eksempel, så får jeg stadig ikke en værdi ud, hvis der ikke er nogle stemmer.
Men derimod får jeg værdien "FALSK" udskrevet ved billeder hvor der er stemmer."
Avatar billede nielle Nybegynder
20. maj 2006 - 21:18 #14
Jeg blev bare i tvivl fordi at du umiddelbart derefter postede noget som ikke havde med den kode at gøre. :^)

Hvad får du udskrevet med dette?

SQL1 = "SELECT SUM(Rate) AS Votes FROM rates WHERE pictureID = " & rsPicture("ID")
Set RSVotes = Conn.Execute(SQL1)
Votes = "" & rsVotes("Votes")
Response.Write "DEBUG1: " & Votes & "<br>"
If Votes = "" Then Votes = 0
Response.Write "DEBUG2: " & Votes & "<br>"
Avatar billede lund_dk Praktikant
20. maj 2006 - 21:22 #15
Hvis der ikke er stemmer:
DEBUG1:
DEBUG2: 0

Hvis der er stemmer(Her er output på begge summen, her burde debug2 være 3
DEBUG1: 15
DEBUG2: 15
Avatar billede lund_dk Praktikant
20. maj 2006 - 21:23 #16
Hov, jeg misforstod lidt.
Men det vil sige jeg her bruger debug2 ?
Avatar billede nielle Nybegynder
20. maj 2006 - 21:24 #17
Ikke forstået?

Debug2 er bare en udskrift af hvad der er i variablen Voes efter denne linje:

If Votes = "" Then Votes = 0
Avatar billede cyberkox Nybegynder
20. maj 2006 - 21:25 #18
Du ska da ha "" om 0, vel?

SQL1 = "SELECT SUM(Rate),COUNT(*) FROM rates WHERE pictureID = " & rsPicture("ID") & ""
            Set RsVotes =  Conn.Execute(SQL1)
            if rsVotes.eof or rsVotes.bof = "" then
              Votes = "0"
            else
              Votes = rsVotes(0) / rsVotes(1)
            end if
           
            Votes = FormatNumber(Votes,1)
Avatar billede nielle Nybegynder
20. maj 2006 - 21:26 #19
Hvis der er "-tegn rundt om Votes så får man vist et problem med FormatNumber().
Avatar billede cyberkox Nybegynder
20. maj 2006 - 21:28 #20
Ahh, hmm, ja, det ka godt vær. Hvad får du ud af det ?
Avatar billede lund_dk Praktikant
20. maj 2006 - 21:30 #21
Jeg får en masse fejl :s
Avatar billede nielle Nybegynder
20. maj 2006 - 21:31 #22
SQL1 = "SELECT SUM(Rate) AS Votes FROM rates WHERE pictureID = " & rsPicture("ID") & ""
Set RSVotes = Conn.Execute(SQL1)
Votes = rsVotes("Votes")
If "" & Votes = "" Then Votes = 0
Set RSVotes = Nothing
response.write "Votes: " & Votes & "<br>"
           
strSQL = "SELECT COUNT(*) FROM rates WHERE pictureID = " & rsPicture("ID")
Set Rs = conn.Execute (strSQL)
count = Rs(0)
If "" & count = "" Then count = 0
Set RS = Nothing
response.write "Count: " & Count & "<br>"

If count > 0 Then
    Rate =  Votes / count
    Rate = FormatNumber(Rate,1)
Else
    Rate = "Ingen stemmer"
End If
Response.Write "Gennemsnit: " & Rate & "<br>"
Avatar billede lund_dk Praktikant
20. maj 2006 - 21:33 #23
Det lykkedes nu,

min endelige kode ser sådan her ud

//###########ANTAL
            SQL1 = "SELECT SUM(Rate) AS Votes FROM rates WHERE pictureID = " & rsPicture("ID")
            Set RSVotes = Conn.Execute(SQL1)
            Votes = "" & rsVotes("Votes")
            'Response.Write "DEBUG1: " & Votes & "<br>"
            If Votes = "" Then Votes = 0
            'Response.Write "DEBUG2: " & Votes & "<br>"
           
            strSQL = "SELECT COUNT(*) FROM rates WHERE pictureID = " & rsPicture("ID")
            Set Rs = conn.Execute (strSQL)
            count = Rs(0)
            Set RS=Nothing
            response.write "Votes:" & Votes & "<br>"
            response.write "Count:" & Count & "<br>"
           
            if votes = 0 and count = 0 then
            rate = "0,0"
            else
            Rate =  Votes / count
            Rate = FormatNumber(Rate,1)
            end if
Avatar billede nielle Nybegynder
20. maj 2006 - 21:34 #24
Forresten:

SQL1 = "SELECT SUM(Rate) AS Votes FROM rates WHERE pictureID = " & rsPicture("ID") & ""

- ændres til:

SQL1 = "SELECT SUM(Rate) AS Votes FROM rates WHERE pictureID = " & rsPicture("ID")

- ikke at det gør nogen forskel, men den sidste '& ""' har absolut ingen funktion, og så kan man jo lige så godt droppe den. :^)
Avatar billede lund_dk Praktikant
20. maj 2006 - 21:35 #25
nielle: Tak for hjælpen ;) Smider du et svar?
Avatar billede nielle Nybegynder
20. maj 2006 - 21:37 #26
Skal cyberkox og jeg ikke bare dele på denne her?
Avatar billede nielle Nybegynder
20. maj 2006 - 21:49 #27
Avatar billede cyberkox Nybegynder
20. maj 2006 - 21:54 #28
Jamen jeg takker :-)

Godt du fik det hen!
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