Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Izracunavanje rejtinga

[es] :: PHP :: PHP za početnike :: Izracunavanje rejtinga

[ Pregleda: 1813 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Izracunavanje rejtinga21.03.2010. u 20:51 - pre 171 meseci
Pozdrav,
tabela izgleda ovako:
id | script_id | rating | ip

rating je, naravno, ocena scripta (od 1 do 5).

Upit koji bi trebalo da prikaze top 5 skriptova izgleda ovako:

Code:
SELECT script_id, AVG(rating) AS total_rating FROM rating GROUP BY script_id ORDER BY total_rating DESC LIMIT 5


ali to ne radi. Malo sam babrao po internetima (kanda ne dovoljno:)), i vidim da se savetuje upotreba ove funkcije.

Hvala unapred!

Hm, zapravo radi, sad sam taj upit provukao kroz phpmyadmin i izbaci lepo 5 rezultata... A na strani izbaci samo dva...
Bice da je problem u kodu koji sledi, a koji kaze ovako:
Code:

while ($row = $db->fetch($sql)) 
                {
                    $checkScript = $db->fetch($db->query("SELECT * FROM scripts WHERE id = '".$row['script_id']."'"));
                    if ($checkScript != NULL)
                    {
                        $script = new Script($row['script_id']);
                        $i++;
...pa ide html output...




[Ovu poruku je menjao kelja dana 21.03.2010. u 22:05 GMT+1]
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-6.sezampro.rs.



+33 Profil

icon Re: Izracunavanje rejtinga21.03.2010. u 21:27 - pre 171 meseci
A što nisi odma' te podatke iz tabele scripts dovukao sa tim prvim upitom, npr.:
Code:
SELECT s.*, AVG(r.rating) AS total_rating 
FROM scripts s, rating r
WHERE s.id = r.script_id
GROUP BY r.script_id 
ORDER BY r.total_rating DESC LIMIT 5

Ili tako nešto...
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Izracunavanje rejtinga21.03.2010. u 21:28 - pre 171 meseci
I da odgovorim sam sebi, da vas ne zbunjujem. :D
Sve fercera ok, ali...
Nasao sam gresku.
Lik koji je ovo radio (stvarno profi, cist kod, sve OOP, samo Smarty nije koristio :D) je zaboravio samo da pri uklanjanju nepostojecih skriptova, ukloni i njihov rejting. :)
Pri nailasku na prvi nepostojeci, a visoko ocenjeni id (skript), loop se prekida...

@Nikola,nije moja skripta, a ako krenem ozbiljnije da ''popravljam'', radice backup. :)

Pozdrav.
 
Odgovor na temu

Gost




Profil

icon Re: Izracunavanje rejtinga25.03.2010. u 18:09 - pre 171 meseci
Malo mi zardjao SQL (navikao na Doctrine, sta ces), ali koliko kapiram, ti tabelu rejting konstantno popunjavas, zar ne? Tj. za svako glasanje za skriptu 15, dodace se jos jedan red u tabeli rating gde ce:
script_id = 15 | rating = 4 | ip = xxxxx

Ako sam dobro razumeo, onda je ovo totalno njakanje baze u prazno. Ja to radim na sledeci nacin:

tabela rating ima kolonu script_id , total, votes, percentage . Za svaki script_id , postoji samo jedan red u tabeli rating. Prilikom glasanja, ta tabela se samo update-uje.

Kolona total je ukupan broj poena koja je ta skripta dobila. Votes = koliko je njih glasalo.

Ako skripta ima 20 poena od 5 glasaca, percentage = 80 (%). Tu kolonu koristis da bi izvukao top 10 skripti na primer.


A ako te nisam dobro razumeo, zaboravi celu poruku


ps:
Nije OOP sve sto pise da jeste
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Izracunavanje rejtinga25.03.2010. u 21:32 - pre 171 meseci
Dragi Goste,
da, radi upravo tako kako si rekao.
Ma nije to moje, resio sam problem. (Zakrpio ono sto vec postoji ;))

Na slican nacin ovom tvom predlozenom sam resio rejting kad sam radio neku svoju skripticu, ALI, tada klijentu nije trebao ip (provera glasanja).

Pozdrav!
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
195.252.79.*



+34 Profil

icon Re: Izracunavanje rejtinga25.03.2010. u 21:50 - pre 171 meseci
Citat:
kelja: Dragi Goste,
da, radi upravo tako kako si rekao.
Ma nije to moje, resio sam problem. (Zakrpio ono sto vec postoji ;))

Na slican nacin ovom tvom predlozenom sam resio rejting kad sam radio neku svoju skripticu, ALI, tada klijentu nije trebao ip (provera glasanja).

Pozdrav!


Ma nisam ja gost, to sam ja... coleee :)

(jbg, skoro gledah malu nocnu muziku)

 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Izracunavanje rejtinga25.03.2010. u 22:16 - pre 171 meseci
He, he, :)
Nego da zanemarimo malo rejting...

Kako bi ti uopste resio taj problem onemogucavanja ponovnog glasanja (bez logina; dakle nema registrovanja korisnika)? Pre 3-4 godine sam pitao ovde na forumu, bas kad sam radio taj pomenuti sajt, i nismo, koliko se secam, dosli do nekog valjanog zakljucka. :)

Odnosno, ovo sa ip je vrlo zgodno dok se sajt testira. Ako bi broj posetilaca/glasanja dostigao neke opasne visine, skript bi puk'o ko tikva. (Stotine i stotine hiljada redova koje treba proveriti ne bi verovatno drazesno uticale na performanse)

:)
 
Odgovor na temu

mitke013
As Divljine
Freelancer

Član broj: 231934
Poruke: 338
195.252.79.*



+34 Profil

icon Re: Izracunavanje rejtinga25.03.2010. u 22:44 - pre 171 meseci
Citat:
kelja: He, he, :)
Nego da zanemarimo malo rejting...

Kako bi ti uopste resio taj problem onemogucavanja ponovnog glasanja (bez logina; dakle nema registrovanja korisnika)? Pre 3-4 godine sam pitao ovde na forumu, bas kad sam radio taj pomenuti sajt, i nismo, koliko se secam, dosli do nekog valjanog zakljucka. :)

Odnosno, ovo sa ip je vrlo zgodno dok se sajt testira. Ako bi broj posetilaca/glasanja dostigao neke opasne visine, skript bi puk'o ko tikva. (Stotine i stotine hiljada redova koje treba proveriti ne bi verovatno drazesno uticale na performanse)

:)


Ja sam to resio preko $_COOKIES koji traju 24 h ovim kodom:
Code:

public function addRate($rate)
{
    $rating = $this->Rating ;
    $rating->rate += $rate ;
    $rating->voted += 1 ;
    $rating->percentage = round($rating->rate / $rating->voted / 5 * 100) ;
    $rating->save() ;
    setcookie(strtolower(get_class($this)) . '_' . $this->id , '1', time()+COOKIE_TIMEOUT, '/' );
}


Na ovaj nacin se moze glasati za SVAKI objekat, bez da mislis o imenu. Proveru da li je neko glasao uradis ovako:
Code:

public function isRated()
{
    return isset($_COOKIE[strtolower(get_class($this)) . '_' . $this->id]) ;
}


Posto ti preporucujem neki template sistem, onda u .tpl stavis nesto poput:
Code:

{if $example->isRated()}
  Vec si glasao
{else}
  <a href="vote.php?id={$example->id}&rate=1" >1</a>
  <a href="vote.php?id={$example->id}&rate=2" >2</a>
{/if}


$example je instanca objekta za koji hoces da se glasa. Ovo je samo grubi primer, MVC to cini mnogo laksim.

Oko IP-a se uopste ne bih zamarao; vecina ljudi ima dinamicke ip adrese pa ti to ne znaci mnogo.

Zastitu glasanja od botova moraces sam da smislis. Ne mogu ti bas sve otkriti :)
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Izracunavanje rejtinga25.03.2010. u 23:01 - pre 171 meseci
Pa hvala i na ovome. Sad jos samo da naucim osnove oop-a i savladam neki template sistem. :)
 
Odgovor na temu

[es] :: PHP :: PHP za početnike :: Izracunavanje rejtinga

[ Pregleda: 1813 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.