Forum » Izdelava spletišč » mysql rank glede na oceno
mysql rank glede na oceno
HardFu ::
Za namen lazje predstavitve bom zadevo malce posplosil, v glavnem pa je pristop isti.
Torej imam dve mysql tabeli, 'Posts' in 'Comments'. Slednja ima polje 'Comments.post_id', da se ve kateremu postu pripada in 'Comments.score', ki je ubistvu integer od 1 - 5, torej ocena posta. Sedaj zelim sortirati poste glede na povprecno oceno IN glede na stevilo komentarjev. Zelim se izogniti temu, da bi bil post z enim komentarjem in oceno 5 na prvem mestu (ker je povprecna ocena 5) ampak bi bili v racunico vzeto tudi stevilo komentarjev. Se pravi da bi bila povprecju dodana se neka teza glede na stevilo komentarjev. Ima kdo kaksno idejo kaksna formula bi bila najboljsa za najboljse rezultate?
MySQL query ni nujen, je pa zazeljen da prisparam kaksno uro.
Hvala in LP
Torej imam dve mysql tabeli, 'Posts' in 'Comments'. Slednja ima polje 'Comments.post_id', da se ve kateremu postu pripada in 'Comments.score', ki je ubistvu integer od 1 - 5, torej ocena posta. Sedaj zelim sortirati poste glede na povprecno oceno IN glede na stevilo komentarjev. Zelim se izogniti temu, da bi bil post z enim komentarjem in oceno 5 na prvem mestu (ker je povprecna ocena 5) ampak bi bili v racunico vzeto tudi stevilo komentarjev. Se pravi da bi bila povprecju dodana se neka teza glede na stevilo komentarjev. Ima kdo kaksno idejo kaksna formula bi bila najboljsa za najboljse rezultate?
MySQL query ni nujen, je pa zazeljen da prisparam kaksno uro.
Hvala in LP
http://codeable.io
Ice-Heki ::
Večje ko je število komentarjev - bolj realna je ocena.
Torej sortiraj po povprečni oceni, nato pa še po številu komentarjev.
Torej sortiraj po povprečni oceni, nato pa še po številu komentarjev.
HardFu ::
Ce bi naredil tako, potem je se vedno boljse ce ima post en sam komentar z oceno 5 kot pa ce ima 30 komentarjev z oceno 4, kar pa ni v skladu s tvojim prvim stavkom.
http://codeable.io
zerox ::
Tako kot je rekel snake oz avg+avg*log(n) (ker je log(1)=0). Lahko pa tudi izbereš sam kakšno drugo logiko ampak je zadeva zelo odvisna od tega koliko komentarjev imaš v povprečju in kako ti variirajo ocene.
HardFu ::
snake, xerox, hvala tocno to sem rabil. Zaenkrat je sistem se v fazi razvoja, pricakuje pa se okoli 100 komentarjev in predvsem visje ocene (4 in 5)
http://codeable.io
Zgodovina sprememb…
- spremenil: HardFu ()
MrBrdo ::
Jaz uporabljam formulo od IMDBja:
Zame zelo dobro deluje.
Lp.
weighted rank (WR) = (v / (v+m)) * R + (m / (v+m)) * C
where:
R = average for the movie (mean) = (Rating)
v = number of votes for the movie = (votes)
m = minimum votes required to be listed in the Top 250 (currently 1250)
C = the mean vote across the whole report (currently 6.8)
Zame zelo dobro deluje.
Lp.
MrBrdo
Zgodovina sprememb…
- spremenilo: MrBrdo ()
HardFu ::
Zanimivo, prvic slisim za 'Bayesian estimate', vsekakor pa se bom bolj pozanimal o tem. Hvala
http://codeable.io
MrBrdo ::
Edini problem je da rabis vec queryjev (vsaj jaz nisem uspel drugace naredit). V Rails mam trenutno takole, za zgornjo formulo:
V vsakem primeru mirkaj v SQL, da bos imel v floating point, ker jaz sem najprej dobival napacne rezultate (ce opazis zdaj tam tisti "* 1.0" - to je zato).
all_scores = Pic.sum('score', :conditions => ["num_scores > 0"]) num_of_all_scores = Pic.sum('num_scores', :conditions => ["num_scores > 0"]) site_avg = all_scores.to_f / num_of_all_scores.to_f min_votes = 1.0 topPics = Pic.find(:all, :conditions => ["num_scores > 0"], :order => "((num_scores / (num_scores + #{min_votes})) * (score / (num_scores * 1.0)) + (#{min_votes} / (num_scores + #{min_votes})) * #{site_avg}) DESC", :limit => 10)
V vsakem primeru mirkaj v SQL, da bos imel v floating point, ker jaz sem najprej dobival napacne rezultate (ce opazis zdaj tam tisti "* 1.0" - to je zato).
MrBrdo
Zgodovina sprememb…
- spremenilo: MrBrdo ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Filmski kritiki in ocenjevanje filmov (strani: 1 2 )Oddelek: Sedem umetnosti | 11206 (10005) | FormerUser |
» | Kateri ne-bloatware antivirus za Windows 7?Oddelek: Programska oprema | 5831 (4759) | sisemen |
» | Heaven - DirectX11 benchmarkOddelek: Navijanje | 2131 (1490) | ekseR |
» | (Access) query po datumuOddelek: Programiranje | 1949 (1524) | imagodei |
» | Vote script(php)-problem?Oddelek: Izdelava spletišč | 949 (905) | AlexUS |