Ver Mensaje Individual
  #13 (permalink)  
Antiguo 15/05/2008, 04:49
Avatar de ramzax200
ramzax200
 
Fecha de Ingreso: noviembre-2003
Mensajes: 172
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Como crear un ranking

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 menordespues 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