Foros del Web » Programando para Internet » PHP »

Como crear un ranking

Estas en el tema de Como crear un ranking en el foro de PHP en Foros del Web. Hola, tengo un sistema de votos en mi pagina, en el que inserto el nombre del usuario votado, y el valor de del voto en ...
  #1 (permalink)  
Antiguo 14/05/2008, 15:02
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Como crear un ranking

Hola, tengo un sistema de votos en mi pagina, en el que inserto el nombre del usuario votado, y el valor de del voto en la bd,

luego para ver los votos lo llamo de la siguiente manera:

Código PHP:

$query 
"SELECT sum(voto) FROM `votos` WHERE usuario='$user';";
        
$con mysql_query($query);
        
$total mysql_fetch_array($con); 
pero ahora me ha surgido la idea de crear un rankig para los mas votados... me he calentado muxo la cabeza pero no se como sumar todos los votos de todos los usuarios, ver el ke mas puntuacion tenga y clasificarlo, supongo que sera una consulta mysql... alguien me puede ayudar??
  #2 (permalink)  
Antiguo 14/05/2008, 15:10
Avatar de ramzax200  
Fecha de Ingreso: noviembre-2003
Mensajes: 172
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Como crear un ranking

Ummm mira, primero, no creo que sea buena idea insertar un valor por cada voto en cada usuario, ya que si tienes 100 usuarios y 100 votos por cada uno ya serian 10 000 registros, es mejor, tener solo 1 registro por usuario y en ese tener el campo N_VOTOS (numero de votos) S_VOTOS (suma de los votos)..

entonces, puedes hacer un promedio de la siguiente forma:

A la hora de hacer tu consulta pides S_VOTOS y lo divides entre N_VOTOS asi te sale el promedio de votacion, y ya lo metes en un array, lo ordenas y ya tienes tu top 10 de usuarios votados :p
  #3 (permalink)  
Antiguo 14/05/2008, 15:27
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Como crear un ranking

Pero esque yo kiero que cada usuario pueda votar solo una vez al dia, la tabla que tengo es sta

CREATE TABLE `votos` (
`id_voto` int(255) NULL auto_increment,
`usuario` varchar(20) NOT NULL,
`ip` varchar(20) NOT NULL,
`fecha` date NOT NULL,
`voto` int(2) NOT NULL,
PRIMARY KEY (`id_voto`)
);

si dices que es mejor un solo registro por usuario no se como hacerlo...:S
que halla miles de registros influye muxo??
  #4 (permalink)  
Antiguo 14/05/2008, 16:16
Avatar de ramzax200  
Fecha de Ingreso: noviembre-2003
Mensajes: 172
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Como crear un ranking

Si se puede, pero es un poco completo, hay que meterlo en arrays, y luego ordenarlo.

Puedes tener como te digo, una tabla para cada usuario que contenga el numero de votos y la suma de los votos, incluso ya el promedio de los votos.

Y aparte, tener una tabla para controlar 1 voto por dia donde si introduciras 1 valor por cada voto.

Tabla 1:
id_usuario
n_votos ...numero de votos
s_votos ... suma de los votos
p_votos ... promedio de votos

Tabla 2:
id_voto
id_usuario
ip
fecha
voto


Asi puedes tener mas control y hacer consultas mas rapidas, sin importar si borras la tabla 2, no perderas el registro de la calificacion de cada usuario, podras limpiar la tabla 2 diariamente ya que es 1 voto por dia y no sirve de nada tener registros de dias anteriores...
  #5 (permalink)  
Antiguo 14/05/2008, 16:19
Avatar de ramzax200  
Fecha de Ingreso: noviembre-2003
Mensajes: 172
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Como crear un ranking

a, una cosa, si es un voto por IP, entonces muchos no podran votar, los que se conectan con una misma IP, en un cafe web, o bajo una misma conexion de cable, etc, hay muchas razones para tener la misma IP...

Otra opcion es por cookies o por registro de usuarios.
  #6 (permalink)  
Antiguo 14/05/2008, 16:45
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Como crear un ranking

pero luego tmbien me gustaria hacer un grafico de estadisticas, y no podria hacerlo :S... necesito mas opiniones x favor, pa hacerlo lo mejor posible
  #7 (permalink)  
Antiguo 14/05/2008, 18:03
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Como crear un ranking

alguien que m pueda ayudar en ste tma??? ske no se ke hacer...
  #8 (permalink)  
Antiguo 14/05/2008, 19:29
Avatar de bLEx  
Fecha de Ingreso: mayo-2008
Ubicación: Villa Alemana, Chile
Mensajes: 181
Antigüedad: 15 años, 11 meses
Puntos: 5
Re: Como crear un ranking

Prueba teniendo un registro por usuario, donde guardes la cantidad de votos y la fecha de la ultima vez que voto, luego cuando este quiera votar, tomas la hora del servidos la comparas con la hora de la ultima fecha de votacion del usuario y si es menor que 1 dia lo mandas a freir huevos...

Y si... influye demasiado tener muchos registros, piensa que por cada vez que el usuario qiera ver el ranking tendras que leer los 100.000 registros, osea si 100 usuarios se conectan a ver el ranking... pongale paños frios al servidor xD!!..


Suerte
  #9 (permalink)  
Antiguo 14/05/2008, 21:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Como crear un ranking

Prueba esta consulta para los últimos 10 más votados:
Código:
SELECT usuario, sum(voto) FROM `votos` GROUP BY usuario LIMIT 10;
Saludos.
  #10 (permalink)  
Antiguo 15/05/2008, 02:14
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Como crear un ranking

y creando una tabla que contenga
id_voto, usuario_votado, nº_vosts, pts_media, votosal_1,votosal_2,votosal_3,votosal_4,votosal_5. ..votosal_10

y luego ir actualizandola...
y luego aparte una que controle los botos al dia...

seria correcto?'??
ske kiero luego hacer estadisticas..
  #11 (permalink)  
Antiguo 15/05/2008, 02:22
Avatar de bLEx  
Fecha de Ingreso: mayo-2008
Ubicación: Villa Alemana, Chile
Mensajes: 181
Antigüedad: 15 años, 11 meses
Puntos: 5
Re: Como crear un ranking

no es un tema de que sea correcto o incorrecto, sino de que sea mas eficiente o no, use menos recursos o te mate el sistema :;P (un poco exagerado), pero bueno. Si tu crees que eso te se acomoda a tus necesidades intentalo...

Aun asi, si el sitio donde lo subiras no maneja un promedio de visitas muy gigantesco quizas no sea mucho el costo asociado. Pero piensalo con la almohada y siempre hay algo mejor :P!!

suerte
  #12 (permalink)  
Antiguo 15/05/2008, 03:20
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Como crear un ranking

hombre... mi aspiracion es tenerr miles y miles de visitas.... por eso quiero que sea de la mejor forma posible para que luego no de problemas... si alguien cree que es mjr deotra forma o algo porfavor que m lo diga.
my objetivo es:

un sistema de votos, en el que cada usuario puede votar una vez al dia a cada usuario..
y despues obtener por cada usuario la puntuacion media, el nº de votos y una serie de estadisticas..
y luego crear un ranking de los mas votados...
  #13 (permalink)  
Antiguo 15/05/2008, 04:49
Avatar de 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 
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:36.