Avatar billede jenskromann Nybegynder
11. november 2006 - 14:59 Der er 17 kommentarer

FInde procent fra afstemning

Jeg mangler lidt hjælp til at lave et 'hot or not' system.

Jeg gjorde før det, at lave en INSERT INTO () hver gang en stemte - men det sløver utroligt meget.

Hvordan skal det ellers gøre?

Man kan stemme på
1 - not
2 - grim
3 - mellem
4 - ok
5 - hot

Ved bare ikke hvordan jeg finder gennemsnittet, og hvordan mysql kolonnerne skal se ud :\

Nogle der ka' hjælpe?
Avatar billede jensgram Nybegynder
11. november 2006 - 16:03 #1
Du kan lave én række pr. element, der skal kunne vurderes.

id | cntVotes | valVotes

Ved afstemning tæller du cntVotes én op, mens valVotes tælles 1-5 op. Gennemsnittet vil da altid være valVotes / cntVotes.


Det lyder bare ikke helt rigtigt, at det skulle sløve med en række pr. stemme. Har du indekseret mv.?
Avatar billede jenskromann Nybegynder
11. november 2006 - 16:12 #2
Nu har jeg gjort noget andet.

Tabel:
id, billed, stemme1, stemme2, stemme3,stemme4,stemme5

så plusser jeg stemme1+stemme2+stemme3+stemm4+stemme5 og ganger med 100 og dividere med alle stemmer i hele tabellen.

Er det ikke rigtigt gjort?
Avatar billede jensgram Nybegynder
11. november 2006 - 16:20 #3
Det er en lidt omstændig måde.

id, billed, stemme (med værdi 1-5) vil være en tand bedre, men stadig redundant da hver række stadig vil indeholde både id og billede
Avatar billede jenskromann Nybegynder
11. november 2006 - 16:27 #4
Men har jeg gjort det rigtigt? Hos mig regner den helt forkert nemlig.. den tæller slet ikke procent.

$check = mysql_query("SELECT COUNT(*) AS antal, stemme1,stemme2,stemme3,stemme4,stemme5 FROM hotornotstem WHERE billed = '" . $row['picput'] . "' GROUP BY billed");
$lolzki = mysql_fetch_assoc ( $check );

$antallet = ($lolzki['stemme1'] +  $lolzki['stemme2'] + $lolzki['stemme3'] + $lolzki['stemme4'] + $lolzki['stemme5']);
$s.="<br /><strong style=\"font-size:16px;\">Gennemsnit: " .  round($antallet*100/$lolzki['antal'], 2) . " %</strong>";
Avatar billede jenskromann Nybegynder
11. november 2006 - 16:39 #5
Eller hvad?
Avatar billede jensgram Nybegynder
11. november 2006 - 17:24 #6
Nej, det er ikke rigtigt. Hvad indeholder rækkerne stemme1-5? Værdierne 1-5?

Hvorfor ændrer du det ikke til forslaget 11/11-2006 16:20:53 ?
Avatar billede mcardle Nybegynder
11. november 2006 - 18:32 #7
Prøv det her:

$user = "33";

$q1 = mysql_query("SELECT picput FROM hotornotstem WHERE id='$id'") OR die(mysql_error());
$row1 = mysql_fetch_array($q1);

$q2 = mysql_query("SELECT * FROM hotornotstem WHERE billed = {$row1['picput']}) OR die(mysql_error());
$row2 = mysql_fetch_array($q2);

$stemmer = $row2["stemme1"]+$row2["stemme2"]+$row2["stemme3"]+$row2["stemme3"]+$row2["stemme5"];

$antal_stemmer = $row2["antal"];

$output = round($stemmer/$antal_stemmer, 1);

echo $output; // Dette resultat er kun med et decimal
Avatar billede mcardle Nybegynder
11. november 2006 - 18:34 #8
Hov...

$user skal selfølgelig være $id
Avatar billede jenskromann Nybegynder
11. november 2006 - 18:45 #9
Hey.. nu har jeg lavet det som jensgram sagde .

Min tabel er nu:
id, billed, stemmer, ialt.

Når en stemmer på fx billede "hej.jpg" med HOT (5), og en anden giver den NOT(1)

så er:
billed = "hej.jpg"
stemmer = 5,1 ( 6 )
ialt = 2


Så bruger jeg denne:
$result = mysql_query("SELECT ialt AS stemmerialt, stemmer AS stemmerne, brugere.brugernavn AS navnet, billedgalleri.billede AS billed
FROM hotornotstem, brugere,billedgalleri
WHERE billedgalleri.brugernavn = brugere.brugernavn
AND brugere.koen = 'p'
ORDER BY stemmerne DESC LIMIT 0,10
");

og til at finde gennemsnittet:
$antal =  round($row['stemmerne']/$row['stemmerialt'],2);

Men den udskriver 5 hele tiden - kan i fortælle mig hvorfor den regner forkert?
Avatar billede jensgram Nybegynder
11. november 2006 - 18:50 #10
stemmer skal ikke være en liste, men summen af stemmerne.

billed = "hej.jpg"
stemmer = 6
ialt = 2


Så skulle det spille.
Avatar billede jenskromann Nybegynder
11. november 2006 - 19:28 #11
Undskyld men hvad mener du? Hvad skal jeg ændre i min kode?
Avatar billede mcardle Nybegynder
11. november 2006 - 19:50 #12
Når du skal lave en update af din tabel, når der kommer en ny stemme, skal du trække det tal ud der står i din db og plusse den med det nye tal og skrive det nye tal i din db.
Avatar billede jenskromann Nybegynder
11. november 2006 - 19:53 #13
hvad taler du om? det var ikke det jeg spurgte om.. det har jeg lavet for længst.. nu vil jeg udskrive en top 10 liste og finde gennemsnittet
Avatar billede jenskromann Nybegynder
12. november 2006 - 01:34 #14
jensgram det har jeg også. stemmerne er jo fx 6 hvis en har stemt 5 og en anden 1 ( 5 + 1 = 6)
Avatar billede jensgram Nybegynder
12. november 2006 - 14:31 #15
Hvad er spørgsmålet så?

Hvis du vil finde top10, så:

SELECT (stemmer / ialt) AS gns, brugere.brugernavn AS navnet, billedgalleri.billede AS billed
FROM hotornotstem, brugere, billedgalleri
WHERE billedgalleri.brugernavn = brugere.brugernavn
AND brugere.koen = 'p'
ORDER BY gns DESC LIMIT 0,10
Avatar billede jenskromann Nybegynder
12. november 2006 - 21:57 #16
tak for svaret jensgram. men resultatet fungere ikke helt optimalt tror jeg.

fordi jeg får gns til 5.00... det kan ikke passe, da den ikke har fået topkarakter hele tiden.

den skulle typisk være 4.54 osv fx..

er der fejl eller?!
Avatar billede jensgram Nybegynder
13. november 2006 - 05:31 #17
Hvad indeholder tabellen? (stemmer, ialt)? Det lyder underligt, men din tabel må indeholde data, der ikke helt stemmer (eller giver 5.0)...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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