como yo te digo es bueno, en una tabla mantienes a tus usuarios y su calificacion, y en otra tabla mantienes los votos diarios (diariamente la vacias para que no se sature).
Yo tengo una galeria de fotos, y solo se puede votar una ves al dia por usuario, estos son mis campos:
Tabla
galeria_fotos pid ... id de la foto
aid ... album de la foto
owner_id ... dueño de la foto
conteo_total ...suma de los votos
n_votos .... numero de votos
Y en la tabla para los votos solo tengo esto:
Tabla
galeria_fotos_vistas pid ... id de la foto que ya se vio
quien_id ... id del que vio la foto
dia ... dia que vio la foto
Cada que un usuario vota, {
el codigo php actualiza el conteo total, sumandole el valor del nuevo voto con el conteo_total actual, y tambien actualiza el numero de votos sumandole 1.
se inserta en la tabla fotos vistas, la foto, el id del que la vio, y el dia
}
Para sacar el top 10, hago esto:
Código PHP:
$sql=mysql_query("select pid,conteo_total,n_votos,owner_id from galeria_fotos where aid='$id_album' and n_votos>=10 ");
$num=mysql_numrows($sql);
for ($a=0;$a<$num;$a++){
$pid=mysql_result($sql,$a,0);
$calificacion=mysql_result($sql,$a,1);
$votos=mysql_result($sql,$a,2);
$owner_id=mysql_result($sql,$a,3);
$promedio=$calificacion/$votos;
$foto[$a][0]= $promedio;
$foto[$a][1]= $pid;
$foto[$a][2]= $owner_id;
}
rsort($foto);//con esto lo ordenamos de mayor a menor
y ya tenemos un array ordenado de mayor a menor, despues haces un for 0~10 y ya tienes tu top 10.
Es solo una idea, el codigo no es el mas ideal pero funciona :neurotico