Foros del Web » Programando para Internet » PHP »

Rankeo de Usuarios

Estas en el tema de Rankeo de Usuarios en el foro de PHP en Foros del Web. Buenas, que tal? Les paso a comentar el problema que me surge, luego de intentar de varias formas no he dado con la solucion! Tengo ...
  #1 (permalink)  
Antiguo 16/04/2009, 08:53
Avatar de nicolyto77  
Fecha de Ingreso: marzo-2007
Ubicación: Buenos Aires
Mensajes: 782
Antigüedad: 17 años
Puntos: 12
Pregunta Rankeo de Usuarios

Buenas, que tal?

Les paso a comentar el problema que me surge, luego de intentar de varias formas no he dado con la solucion!

Tengo un listadito de 5 usuarios en mi Web, ahora cada uno con su ID y tienen PUNTOS que van siendo acumulados a medida que hagan las cosas bien

¿Cual es el tema? Yo de acuerdo a los puntos que disponga dicho usuario y de la cantidad de mensajes que me ha enviado en la Web, saco un ORDEN de usuarios, con la consulta:

Código PHP:
$sql "SELECT * FROM users WHERE user_id = '$ID' ORDER BY envios DESC, puntos ASC"
Ahora, lo que necesito es que de acuerdo a ese orden que me da, por ejemplo:

Cita:
User2 = 5 Subidas - 50 Puntos
User5 = 7 Subidas - 20 Puntos
User1 = 20 Subidas - 1 Punto
User4 = 2 Subidas - 0 Puntos
User3 = 0 Subidas - 0 Puntos
Con estos datos, poder sacar un RANKING de usuarios, poniendo al USER2 con el Ranking Nº1, al USER5 con el Ranking Nº2, y asi dependiendo de los envios que hagan, y de como vaya variando la consulta, ya que cada tanto podra cambiar.

De que manera deberia efectuar mi codigo y consulta para poder obtener el dato que indique el ranking de mis usuarios.

Muchas gracias por la molestia. Saludos
__________________
CabaSoft Networks
  #2 (permalink)  
Antiguo 16/04/2009, 09:34
Avatar de rickyper  
Fecha de Ingreso: abril-2009
Mensajes: 182
Antigüedad: 14 años, 11 meses
Puntos: 10
Respuesta: Rankeo de Usuarios

Me parece que el problema esta en tu consulta, envíame tu tabla y parte de tu php donde muestras los resultado después de hacer tu consulta osea después de esto:

$sql = "SELECT * FROM users WHERE user_id = '$ID' ORDER BY envios DESC, puntos ASC";
  #3 (permalink)  
Antiguo 16/04/2009, 10:23
Avatar de nicolyto77  
Fecha de Ingreso: marzo-2007
Ubicación: Buenos Aires
Mensajes: 782
Antigüedad: 17 años
Puntos: 12
Respuesta: Rankeo de Usuarios

Hola, gracias por responderme

Asi es el codigo mas apliado:

Código PHP:
<?php
            $sqlU 
=" SELECT * FROM    users WHERE user_id ORDER BY RAND() LIMIT 0, 1";
            
$resultU mysql_query($sqlU) OR die(mysql_error());
            
$INFOUSER mysql_fetch_assoc($resultU);
            
            
$ID $INFOUSER['user_id'];
            
            
$sqlR ="SELECT * FROM users WHERE user_id = '".$ID."' ORDER BY envios DESC, puntos ASC";
            
$resultR mysql_query($sqlR) OR die(mysql_error());
            
$INFO mysql_fetch_assoc($resultR);
        
?>
Y luego no supe que poner para mostrar el RANK de ese usuario aleatorio!

Código PHP:
Puntos: <?php echo $INFOUSER['puntos']; ?><br />
            Envios Totales: <?php echo $INFOUSER['envios']; ?><br />
            Usuario Numero: <?php echo $INFOUSER['user_id']; ?><br />
            User RANK: <?php echo $INFO['user_id']; ?><br />
Pero me ponia el ID del Usuario, logicamente... No se como hacerlo

Ojala me puedan ayudar con esto, que es algo que me tiene loco de hace varios dias ya...

Saludos
__________________
CabaSoft Networks
  #4 (permalink)  
Antiguo 16/04/2009, 11:05
Avatar de rickyper  
Fecha de Ingreso: abril-2009
Mensajes: 182
Antigüedad: 14 años, 11 meses
Puntos: 10
Por lo que puedo ver tienes los siguientes campos en tu tabla:

user_id
envios
puntos


Entonces si el ranking lo pones por la cantidad de puntos sería así:
$sqlR ="SELECT * FROM users WHERE user_id = '".$ID."' ORDER BY envios DESC, puntos ASC";
$resultR = mysql_query($sqlR) OR die(mysql_error());
$contador=0;
while ($INFO = mysql_fetch_assoc($resultR))
{
$contador=$contador+1;
?>

Puntos: <?php echo $INFOUSER['puntos']; ?><br />
Envios Totales: <?php echo $INFOUSER['envios']; ?><br />
Usuario Numero: <?php echo $INFOUSER['user_id']; ?><br />
User RANK: <?php echo "Ranking '$contador'"; ?><br />
<?
}
?>


Me respondes si algo está mal, estamos para ayudarnos
Saludos.

Por lo que puedo ver tienes los siguientes campos en tu tabla:

user_id
envios
puntos


Entonces si el ranking lo pones por la cantidad de puntos sería así:

Código PHP:
$sqlR ="SELECT * FROM users WHERE user_id = '".$ID."' ORDER BY envios DESC, puntos ASC";
 $resultR = mysql_query($sqlR) OR die(mysql_error());
$contador=0;
while ($INFO = mysql_fetch_assoc($resultR)) 
{
$contador=$contador+1;
?>

Puntos: <?php echo $INFOUSER['puntos']; ?><br />
            Envios Totales: <?php echo $INFOUSER['envios']; ?><br />
            Usuario Numero: <?php echo $INFOUSER['user_id']; ?><br />
            User RANK: <?php echo "Ranking '$contador'"?><br />
<?
}
?>

Me respondes si algo está mal, estamos para ayudarnos
Saludos.

Última edición por GatorV; 16/04/2009 a las 12:31
  #5 (permalink)  
Antiguo 16/04/2009, 11:39
Avatar de nicolyto77  
Fecha de Ingreso: marzo-2007
Ubicación: Buenos Aires
Mensajes: 782
Antigüedad: 17 años
Puntos: 12
Respuesta: Rankeo de Usuarios

Holas

Gracias por el codigo!

Lo he probado, pero desgraciadamente no me funciono

Me muestra a todos los usuarios con RANK 1

Ahora, lo que yo tengo, es una tabla que muestra tan solo 1 usuario en forma aleatoria, y al refrescar la pagina, muestra otro o tal vez el mismo; tendra algo que ver?

En Ranking me aparecen todos con el 1

Y si yo efectuo la consulta en la BD como lo mencione en el primer post:

Código:
SELECT * FROM users WHERE user_id = '$ID' ORDER BY envios DESC, puntos ASC
Me lo muestra bien, pero tan solo en forma abstracta, me muestra cual es el primero, el segundo, tercero, cuarto y quinto:

Cita:
User2 = 5 Subidas - 50 Puntos
User5 = 7 Subidas - 20 Puntos
User1 = 20 Subidas - 1 Punto
User4 = 2 Subidas - 0 Puntos
User3 = 0 Subidas - 0 Puntos
La verdad, escucho cualquier opinion para poder satisfacer mi duda, ya he probado de todo un poco, pero no lo pude lograr

Gracias igualmente
__________________
CabaSoft Networks
  #6 (permalink)  
Antiguo 16/04/2009, 11:52
Avatar de rickyper  
Fecha de Ingreso: abril-2009
Mensajes: 182
Antigüedad: 14 años, 11 meses
Puntos: 10
Respuesta: Rankeo de Usuarios

Prueba asi:

?>

Puntos: <?php echo $INFOUSER['puntos']; ?><br />
Envios Totales: <?php echo $INFOUSER['envios']; ?><br />
Usuario Numero: <?php echo $INFOUSER['user_id']; ?><br />
User RANK: <?php echo "Ranking '$contador'"; ?><br />
<?
$contador=$contador+1;
}

Tu error puede estar en que solo muestras un usuario a la vez y este siempre es el primero.
Prueba mostrandolos todos y verás como el código te sirve
  #7 (permalink)  
Antiguo 16/04/2009, 11:57
Avatar de nicolyto77  
Fecha de Ingreso: marzo-2007
Ubicación: Buenos Aires
Mensajes: 782
Antigüedad: 17 años
Puntos: 12
Gracias nuevamente, y perdona si te insisto mucho

No me funciono, probe poner la suma del bucle arriba, abajo, y en ambos lados

Cualquier cosa la pruebo varias veces y de diferentes maneras por las dudas de pegarle de suerte

Ahora todos los RANK dan 0. Es raro que se repitan, porque todos el mismo¿¿

Igualmente gracias, yo continuo probando cosas a ver que sale

Holas denuevo

He leido algo de esto, pero no se como traducirlo a MySQL con PHP!!

Código:
SET @row=0;
SELECT (@row:=@row+1) AS row, puntos FROM users ORDER BY puntos;
De esta manera, despues aclara que puedo acceder al dato asi:

Código:
SET @row=0;
SELECT * FROM (
 SELECT (@row:=@row+1) AS row, puntos FROM users ORDER BY puntos ) t WHERE username='Pepito';
Pero todo esto no se como pasarlo al MySQL tradicional, y convertirlo a los campos de mi Web...

Espero una mano, gracias
__________________
CabaSoft Networks

Última edición por GatorV; 16/04/2009 a las 12:31
  #8 (permalink)  
Antiguo 16/04/2009, 12:29
Avatar de rickyper  
Fecha de Ingreso: abril-2009
Mensajes: 182
Antigüedad: 14 años, 11 meses
Puntos: 10
Respuesta: Rankeo de Usuarios

Prueba esto:

$contador=0;
while ($contador<=($INFO = mysql_fetch_assoc($resultR)))
{
$contador=$contador+1;
?>

Puntos: <?php echo $INFOUSER['puntos']; ?><br />
Envios Totales: <?php echo $INFOUSER['envios']; ?><br />
Usuario Numero: <?php echo $INFOUSER['user_id']; ?><br />
User RANK: <?php echo "Ranking '$contador'"; ?><br />
<?

Pero como te dije esto te sale bién si haces un listado
  #9 (permalink)  
Antiguo 16/04/2009, 12:35
Avatar de nicolyto77  
Fecha de Ingreso: marzo-2007
Ubicación: Buenos Aires
Mensajes: 782
Antigüedad: 17 años
Puntos: 12
Respuesta: Rankeo de Usuarios

Gracias, no me funciono, pero creo que es por eso mismo!

Yo selecciono un solo usuario, para mostrarlo en un panel Aleatorio... Entonces el contador queda en uno siempre, no?

Pero, no habria manera entonces, o una cosa o la otra tendria que hacer

La manera de ahi arriba, la encontre en un foro de MySQL, pero no es lo comun, hay parametros que no entiendo como transladar a mi aplicacion...

No se que hacer, me quede anonadado

Pero muchas gracias por tu interes, tengo fe que saldra
__________________
CabaSoft Networks
  #10 (permalink)  
Antiguo 16/04/2009, 12:39
Avatar de rickyper  
Fecha de Ingreso: abril-2009
Mensajes: 182
Antigüedad: 14 años, 11 meses
Puntos: 10
Respuesta: Rankeo de Usuarios

Hacen algo como esto:
$contador=0;
$sqlR ="SELECT ($contador+1) as contador,user_id,envios,puntos FROM users WHERE user_id = '".$ID."' ORDER BY envios DESC, puntos ASC";
while ($INFO = mysql_fetch_assoc($resultR))
{

?>

Puntos: <?php echo $INFOUSER['puntos']; ?><br />
Envios Totales: <?php echo $INFOUSER['envios']; ?><br />
Usuario Numero: <?php echo $INFOUSER['user_id']; ?><br />
User RANK: <?php echo $INFO['contador']; ?><br />
<?
}
?>
  #11 (permalink)  
Antiguo 16/04/2009, 12:52
Avatar de nicolyto77  
Fecha de Ingreso: marzo-2007
Ubicación: Buenos Aires
Mensajes: 782
Antigüedad: 17 años
Puntos: 12
Respuesta: Rankeo de Usuarios

Y no se en que estare fallando ahora, pero me sigue dando RANK 1 a todos los usuarios

Ademas no puedo probarlo en el PHPMyAdmin porque no me acepta las variables, no se como poder transpasarlo! Justamente en este LINK se muestra el ejemplo, y 'creo' que es algo parecido a lo que busco...

Pero no hay manera de adaptarlo, la verdad que no entiendo mucho la sintaxis de SQL limpio

Gracias por tu tiempo usado en mis dudas, saludos
__________________
CabaSoft Networks
  #12 (permalink)  
Antiguo 16/04/2009, 13:01
Avatar de rickyper  
Fecha de Ingreso: abril-2009
Mensajes: 182
Antigüedad: 14 años, 11 meses
Puntos: 10
Respuesta: Rankeo de Usuarios

El problema es que tu pones que te muestre un limte de un registro... te voy a mandar mi email por privado para no estar llenando este foro.ok
  #13 (permalink)  
Antiguo 16/04/2009, 13:05
Avatar de nicolyto77  
Fecha de Ingreso: marzo-2007
Ubicación: Buenos Aires
Mensajes: 782
Antigüedad: 17 años
Puntos: 12
Respuesta: Rankeo de Usuarios

OK

Probe asi en PHPMyAdmin y logre que me ponga lo que queria, a ver como lo podria pasar a PHP:

Cita:
SET @row:=0; SELECT (@row:=@row+1) AS row,user_id,uploads,puntos FROM dreiv2_user ORDER BY uploads DESC, puntos ASC
Y me sale esto de resultado:

Código:
row | user_id | puntos

1     |     4      |      100
2     |     2      |        50
3     |     1      |        30
4     |     5      |        25
5     |     3      |        0
Es un ejemplo, pero hace lo que quiero, esta el campo ROW ahi numerandome, y los datos al lado validos!

Me faltaria poder usar esas variables @ROW en la sentencia PHP, que probe y no me dejo!!

Gracias por la ayuda, a ver que sale
__________________
CabaSoft Networks
  #14 (permalink)  
Antiguo 16/04/2009, 13:12
Avatar de rickyper  
Fecha de Ingreso: abril-2009
Mensajes: 182
Antigüedad: 14 años, 11 meses
Puntos: 10
Respuesta: Rankeo de Usuarios

Miar en SET @row:=0; lo unico que hacen es declarar una variable:en php lo puedes hacer asi:

$row=0;
SELECT ($row:=$row+1) AS row,user_id,uploads,puntos FROM dreiv2_user ORDER BY uploads DESC, puntos ASC;
  #15 (permalink)  
Antiguo 16/04/2009, 13:41
Avatar de nicolyto77  
Fecha de Ingreso: marzo-2007
Ubicación: Buenos Aires
Mensajes: 782
Antigüedad: 17 años
Puntos: 12
Respuesta: Rankeo de Usuarios

Sigue sin funcionar

Cualquier aporte es bienvenido! Igualmente nos contactamos via mail, pero queda abierto por si alguno me puede dar una mano para resolver este dilema

Saludos
__________________
CabaSoft Networks
  #16 (permalink)  
Antiguo 16/04/2009, 14:35
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 7 meses
Puntos: 103
Respuesta: Rankeo de Usuarios

yo te recomiendo, que el server cada 10 min. abra un archivo php, que calcule todos los rankeos ,y que en esa misma tabla del usuario, en otro campo, ponga el rankeo total de cada uno, asi no tiene que estar calculando el rankeo todas las veces que uno se pregunta por ello, o sino un mysql_result le podria venir bien.

saludos
__________________
Hangouts de JavaScript todos los jueves 20hs GMT, Unite !
https://plus.google.com/u/0/108504944676960830886
  #17 (permalink)  
Antiguo 17/04/2009, 14:36
Avatar de rickyper  
Fecha de Ingreso: abril-2009
Mensajes: 182
Antigüedad: 14 años, 11 meses
Puntos: 10
De acuerdo Respuesta: Rankeo de Usuarios

Hola, espero que no sea demaciado tarde, mira logré una solución aunque es guardando los datos en un archivo, cosa que no es muy segura a mi parecer y al parecer de muchos programadores.

Bueno tu ves si te sirve, alli te va:

Código PHP:
<?
$connect
=mysql_connect("localhost","root","");
mysql_select_db("pruebas"$connect);
$contador=0;
$resultado mysql_query("SELECT idusuario,puntos,envios FROM usuarios",$connect);
//Guardamos en un archivo los datos de la consulta
if($registrosmysql_num_rows ($resultado)) 
{
    
$archivo="ranking.txt";
    
$fp=fopen($archivo,"w+");
    while (
$row=mysql_fetch_array($resultado))
    {
    
$contador=$contador+1;    
    
$idusuario$row["idusuario"];  
    
$puntos$row["puntos"];
    
$envios$row["envios"];
    
$informacion="Usuario: $idusuario Puntos: $puntos Envíos: $envios Ranking: $contador\n";
    
fputs($fp,$informacion);
    }
}
//Leemos y mostramos aleatoriamente
$archivo="ranking.txt";
$fp=fopen($archivo,"r");
while(
$datos fread($fpfilesize($archivo)))
{
$separaciones explode("\n",(trim($datos)));
$valor=$separaciones[array_rand($separaciones)];
echo 
$valor;
}
?>
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 12:14.