Foros del Web » Programando para Internet » PHP »

crear un ranking

Estas en el tema de crear un ranking en el foro de PHP en Foros del Web. necesito alguna idea para el proyecto que tengo entre manos, ya que estoy completamente bloqueado. Me gustaría hacer un ranking/clasificación con los resultados de varias ...
  #1 (permalink)  
Antiguo 24/05/2012, 05:31
 
Fecha de Ingreso: enero-2012
Mensajes: 88
Antigüedad: 12 años, 11 meses
Puntos: 1
crear un ranking

necesito alguna idea para el proyecto que tengo entre manos, ya que estoy completamente bloqueado.

Me gustaría hacer un ranking/clasificación con los resultados de varias carreras.

Tengo una tabla con el calendario de carreras, otra con los corredores y otra con los resultados enlazando a las dos anteriores.

Se me había ocurrido crear una tabla con el ranking pero como la idea es automatizarlo, que al meter los resultados se actualice el ranking, pero solo una vez pues no tengo ni idea de como puedo hacerlo.

Tambien pense en una tabla temporal, pero creo que sobrecargaría de trabajo al server

A través de consultas se podría hacer? si se hacer que muestre los corredores con sus puntos, pero como podría ordenarlo sin ser una columna de la tabla?

Alguna otra idea?

Saludos
  #2 (permalink)  
Antiguo 24/05/2012, 09:47
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
Respuesta: crear un ranking

Hola, la lógica es la que manda en este caso:

- El ranking puntaje debería ser una tabla con los siguientes registros: ID (autoincrementable), ID de corredor, ID de carrera y fecha de carrera.

- La tabla corredor: ID (autoincrementable), ID de equipo, y los demás datos adicionales del corredor.

- La tabla carreras: ID, fecha de carrera, ID de corredores, ID de lugar.

- La tabla lugares: ID y datos adicionales (como dirección, geolocalización, etc.).


Ahora bien:

- El truco de una estructura de tablas como ésta es que puedes establecer una relación lógica y directa entre ellas mediante la comparación.

- El peso del trabajo en la interfaz recaería sobre el corredor, cuyos datos en el panel de edición definirán los datos de la tabla ranking Puntaje.

- A efectos de estructura de contenido, Equipos sería una categoría padre dentro de la cual meterás a los corredores respectivos.

- La tabla lugares estará representada los campos, pistas o cualquier sitio específico del evento.


Hasta ahí me dio la neurona. Obviamente es un punto inicial bastante primitivo pero por ahí va el asunto: relacionar y taxonomizar.

Por si acaso no lo conoces te presento a WordPress, una aplicación que te ofrece todo el núcleo necesario para que te concentres en programar. Cualquier duda estamos a la orden en el foro de WP: http://www.forosdelweb.com/f118/

Última edición por metacortex; 24/05/2012 a las 15:05
  #3 (permalink)  
Antiguo 24/05/2012, 10:25
 
Fecha de Ingreso: enero-2012
Mensajes: 88
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: crear un ranking

me gusta la idea base :) pero una pregunta, cada tipo de carrera da unos puntos diferentes, por ejemplo las tipo 1 dan 50 puntos al vencedor (bajando puntos por cada posicion), las tipo 30, etc, ¿como se podría implementar el sistema de puntos?

es el punto principal del ranking, pero sigo sin ver por donde integrarlo
  #4 (permalink)  
Antiguo 24/05/2012, 15:14
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
Respuesta: crear un ranking

Me expresé mal en el post (corregido). La tabla en cuestión aglomeraría el histórico del puntaje. El ranking no es otra cosa sino los cálculos matemáticos a los que sometas los puntos de cara al número de competencias, en un lapso determinado y frente a otros competidores (eso lo haces con PHP).

Por ejemplo -y para comprobar que hablamos de lo mismo- un corredor ha competido 5 veces en una copa. El resultado de esas veces (1ª competencia => 2do lugar ; 2ª competencia => 1er lugar; 3ª competencia => 1er lugar, etc...) le dará una posición, un ranking o average dentro del campeonato.
  #5 (permalink)  
Antiguo 25/05/2012, 03:22
 
Fecha de Ingreso: enero-2012
Mensajes: 88
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: crear un ranking

Muchas gracias, he seguido más o menos tu idea y ya he conseguido mostrar los corredores con sus respectivos puntos, pero ahora tengo un nuevo problema (siento ser tan pesado) tengo las puntuaciones de cada corredor en una variable de nombre el id de cada corredor, ¿como hago para ordenarlos en una tabla? No se me ocurre nada

Dejo el código

Código PHP:
$sqlresultados "SELECT rid, cid, pos, tiempo FROM nuke_resultados_ciclocross";
$resultresultados mysql_query($sqlresultados);
while (list (
$carrera,$corredor,$posicion,$tiempo) = mysql_fetch_row ($resultresultados)){
      
      
$sqlcarrera "SELECT tipo FROM nuke_calendario_ciclocross WHERE id = $carrera";
      
$resultcarrera mysql_query($sqlcarrera);
      list (
$categoria) = mysql_fetch_row ($resultcarrera);

      if (
$categoria == 8) {
      
            if (
$posicion == 1) $$corredor = $$corredor +8;
            if (
$posicion == 2) $$corredor = $$corredor +6;
            if (
$posicion == 3) $$corredor = $$corredor +5;
            if (
$posicion == 4) $$corredor = $$corredor +4;
            if (
$posicion == 5) $$corredor = $$corredor +3;
            if (
$posicion == 6) $$corredor = $$corredor +2;
            if (
$posicion == 7) $$corredor = $$corredor +1;
            if (
$posicion == 8) $$corredor = $$corredor +1;
            if (
$posicion == 9) $$corredor = $$corredor +1;
            if (
$posicion == 10) $$corredor = $$corredor +1;
      
      }

      if (
$categoria == 7) {
      
            if (
$posicion == 1) $$corredor = $$corredor +13;
            if (
$posicion == 2) $$corredor = $$corredor +11;
            if (
$posicion == 3) $$corredor = $$corredor +9;
            if (
$posicion == 4) $$corredor = $$corredor +7;
            if (
$posicion == 5) $$corredor = $$corredor +6;
            if (
$posicion == 6) $$corredor = $$corredor +5;
            if (
$posicion == 7) $$corredor = $$corredor +4;
            if (
$posicion == 8) $$corredor = $$corredor +3;
            if (
$posicion == 9) $$corredor = $$corredor +2;
            if (
$posicion == 10) $$corredor = $$corredor +1;
            if (
$posicion == 11) $$corredor = $$corredor +1;
            if (
$posicion == 12) $$corredor = $$corredor +1;
            if (
$posicion == 13) $$corredor = $$corredor +1;
            if (
$posicion == 14) $$corredor = $$corredor +1;
            if (
$posicion == 15) $$corredor = $$corredor +1;
      
      }


}

$sqlcorredor "SELECT id, nombre, apellidos FROM nuke_corredores_cc";
$resultcorredor mysql_query($sqlcorredor);


echo
"<table width=\"90%\"><thead><tr><th width=\"80%\">Corredor</th><th width=\"20%\">Puntos</th></tr></thead><tbody>";
while (list (
$id,$nombre,$apellidos) = mysql_fetch_row ($resultcorredor)){

if ($
$id != NULL) echo"<tr><td>".utf8_encode($nombre)." ".utf8_encode($apellidos)."</td><td>".$$id." puntos</td></tr>";

}
echo
"</tbody></table>"
  #6 (permalink)  
Antiguo 27/05/2012, 10:22
 
Fecha de Ingreso: enero-2012
Mensajes: 88
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: crear un ranking

Ninguna idea para ordenar la tabla resultante? os dejo la salida http://elpeloton.net46.net/ranking-ciclocross/
  #7 (permalink)  
Antiguo 27/05/2012, 11:11
Avatar de djboro88  
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: crear un ranking

Podrías guardar el resultado final en la base de datos y a partir de ahi, ordenarlo.
  #8 (permalink)  
Antiguo 28/05/2012, 04:44
 
Fecha de Ingreso: enero-2012
Mensajes: 88
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: crear un ranking

el problema de guardar el resultado en la db sería para modificar las puntuaciones después, o eliminar carreras, etc...

Creo que lo ideal sería utilizar un array o similar para ordenarlo, aunque nunca los he utilizado y no tengo ni idea de como hacerlo. Alguien me podría echar un cable con ello?

Saludos
  #9 (permalink)  
Antiguo 28/05/2012, 10:20
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
Respuesta: crear un ranking

Cita:
Iniciado por jona86 Ver Mensaje
el problema de guardar el resultado en la db sería para modificar las puntuaciones después, o eliminar carreras, etc...

Creo que lo ideal sería utilizar un array o similar para ordenarlo, aunque nunca los he utilizado y no tengo ni idea de como hacerlo. Alguien me podría echar un cable con ello?

Saludos
Este tópico comenzó como una solicitud de sugerencias acerca del planteamiento estructural de un proyecto. No imagino cómo piensas desarrollarlo si no tienes remota idea de lo que es un array.

Cita:
Iniciado por jona86 Ver Mensaje
Alguien me podría echar un cable con ello?
Bajo el escenario que nos muestras, la única forma de echarte un cable es haciendo el trabajo por ti. Ignoro si aquí hay alguien dispuesto a hacerlo, pero normalmente no es el tipo de ayuda que sueles obtener de un foro.

Si te interesa: http://www.php.net/manual/es/book.array.php
  #10 (permalink)  
Antiguo 28/05/2012, 10:39
 
Fecha de Ingreso: enero-2012
Mensajes: 88
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: crear un ranking

Si realmente crees que no me he leído el manual de php estás bastante equivocado, lo único que pido son una directrices para usar un array en php con la salida que obtengo dado que nunca los he usado en este lenguaje y me resultan algo extraños respecto a otros lenguajes sobre todo teniendo en cuenta el tipo de variables que estoy utilizando.

Ya sé el tipo de ayuda que puedo obtener de un foro y esa es la que pido, en ningún momento creo que he dado a entender que necesito que alguien haga el trabajo por mi... tan solo he pedido que me echen un cable con arrays
  #11 (permalink)  
Antiguo 28/05/2012, 11:23
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
Respuesta: crear un ranking

Cita:
Iniciado por jona86 Ver Mensaje
Si realmente crees que no me he leído el manual de php estás bastante equivocado, lo único que pido son una directrices para usar un array en php con la salida que obtengo dado que nunca los he usado en este lenguaje y me resultan algo extraños respecto a otros lenguajes sobre todo teniendo en cuenta el tipo de variables que estoy utilizando.

Ya sé el tipo de ayuda que puedo obtener de un foro y esa es la que pido, en ningún momento creo que he dado a entender que necesito que alguien haga el trabajo por mi... tan solo he pedido que me echen un cable con arrays
- No es para enfadarse. Tu anterior post se resume en 2 cosas: que no sabes de arrays y que al mismo tiempo te ayuden con un código armado.

- La consulta desde la base de datos viene de por sí como un array y ese array lo tratas con un bucle. Esto es así en php y cualquier otro lenguaje de programación.

- Existen 2 posts de 2 usuarios diferentes cuyo consejo es: "mete los datos en la BD y luego trátalos con PHP". Aún no veo intentos que sean producto de seguir ese consejo.

- Si dices manejar otros lenguajes de programación, seguramente te habrás tropezado con suficientes problemas en el camino como para saber que no puedes presentarte en un foro diciendo: "Creo que lo ideal sería utilizar un array o similar para ordenarlo, aunque nunca los he utilizado y no tengo ni idea de como hacerlo. Alguien me podría echar un cable con ello?"... El mejor "cable" es el enlace al manual.

- Tómalo con buena onda. Si no aprendes lo básico, de nada te servirá hacer 1000 preguntas porque al final quedarás en las mismas (Para muestra un botón: llevas 4 días rondando por el foro y no has conseguido mucho). Te aconsejo que "desperdicies" un día completo -en el que te olvidarás del proyecto actual- y te propongas a adquirir dominio sobre esa parte elemental. Verás que posteriormente encararás el problema con mayor fortaleza. Ahora bien, de ti depende seguir sintiéndote ofendido o encontrar la parte buena de este mensaje.

http://www.php.net/manual/es/book.array.php
  #12 (permalink)  
Antiguo 29/05/2012, 11:47
 
Fecha de Ingreso: enero-2012
Mensajes: 88
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: crear un ranking

Disculpa mis formas en el último post, no estaba enfadado, simplemente había tenido un mal día y lo pagué escribiendo la respuesta.

Ya he logrado una solución al problema, no sé si será la mejor optimizada, pero me base en C y luego fui cambiandolo a php. Aquí la dejo por si a alguien le sirve:

Código PHP:
<?php  

$sqlresultados 
"SELECT rid, cid, pos, tiempo FROM nuke_resultados_ciclocross";
$resultresultados mysql_query($sqlresultados);
while (list (
$carrera,$corredor,$posicion,$tiempo) = mysql_fetch_row ($resultresultados)){
      
      
$sqlcarrera "SELECT tipo FROM nuke_calendario_ciclocross WHERE id = $carrera";
      
$resultcarrera mysql_query($sqlcarrera);
      list (
$categoria) = mysql_fetch_row ($resultcarrera);

      if (
$categoria == 8) {
      
            if (
$posicion == 1) $$corredor = $$corredor +8;
            if (
$posicion == 2) $$corredor = $$corredor +6;
            if (
$posicion == 3) $$corredor = $$corredor +5;
            if (
$posicion == 4) $$corredor = $$corredor +4;
            if (
$posicion == 5) $$corredor = $$corredor +3;
            if (
$posicion == 6) $$corredor = $$corredor +2;
            if (
$posicion == 7) $$corredor = $$corredor +1;
            if (
$posicion == 8) $$corredor = $$corredor +1;
            if (
$posicion == 9) $$corredor = $$corredor +1;
            if (
$posicion == 10) $$corredor = $$corredor +1;
      
      }

      if (
$categoria == 7) {
      
            if (
$posicion == 1) $$corredor = $$corredor +13;
            if (
$posicion == 2) $$corredor = $$corredor +11;
            if (
$posicion == 3) $$corredor = $$corredor +9;
            if (
$posicion == 4) $$corredor = $$corredor +7;
            if (
$posicion == 5) $$corredor = $$corredor +6;
            if (
$posicion == 6) $$corredor = $$corredor +5;
            if (
$posicion == 7) $$corredor = $$corredor +4;
            if (
$posicion == 8) $$corredor = $$corredor +3;
            if (
$posicion == 9) $$corredor = $$corredor +2;
            if (
$posicion == 10) $$corredor = $$corredor +1;
            if (
$posicion == 11) $$corredor = $$corredor +1;
            if (
$posicion == 12) $$corredor = $$corredor +1;
            if (
$posicion == 13) $$corredor = $$corredor +1;
            if (
$posicion == 14) $$corredor = $$corredor +1;
            if (
$posicion == 15) $$corredor = $$corredor +1;
      
      }


}

$sqlcorredor "SELECT id, nombre, apellidos, nacionalidad FROM nuke_corredores_cc";
$resultcorredor mysql_query($sqlcorredor);

while (list (
$id,$nombre,$apellidos,$pais) = mysql_fetch_row ($resultcorredor)){

$puntuacion[$id] = $$id;
}

arsort($puntuacion);
mostrar_array ($puntuacion);

Function 
mostrar_array ($array)
{
   echo
"<table style=\"font-size: 8pt\" id=\"tabla\"><thead><tr><th width=\"5%\"></th><th width=\"10%\"></th><th width=\"75%\">Corredor</th><th width=\"15%\">Puntos</th></tr></thead><tbody>";
$i=1;
   foreach (
$array as $clave=>$valor)
   {
      
$sqlcorredor2 "SELECT id, nombre, apellidos, nacionalidad FROM nuke_corredores_cc WHERE id = $clave";
      
$resultcorredor2 mysql_query($sqlcorredor2);

      list (
$id,$nombre,$apellidos,$pais) = mysql_fetch_row ($resultcorredor2);

  
$acentos = array("ñ""á""é""í""ó""ú""Ñ""Á""É""Í""Ó""Ú"" ");
  
$sinacentos = array("n""a""e""i""o""u""N""A""E""I""O""U""_");

  
$sqlpais "SELECT nombre FROM nuke_paises WHERE id = '".$pais."'";
  
$resultpais mysql_query($sqlpais);
  list(
$nombre_pais) = mysql_fetch_row($resultpais);
  
$img strtolower(str_replace($acentos$sinacentosutf8_encode($nombre_pais)));

if (
$valor==NULL$valor=0;
echo
"<tr><td align=\"center\">".$i."</td><td align=\"center\"></td><td><a class=\"lbpModal\" href=\"../wp-content/db/ciclistas_cc.php?ciclista=$id\">".utf8_encode($nombre)." ".utf8_encode($apellidos)."</a></td><td align=\"center\">".$valor."</td></tr>";
      
$i++;
   }
   echo
"</tbody></table>";
}

?>
  #13 (permalink)  
Antiguo 30/05/2012, 09:23
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
Respuesta: crear un ranking

No hay rollo jona86. Discúlpame tú también. Pasapalabra y sigamos ;)

Cita:
Iniciado por jona86 Ver Mensaje
Ninguna idea para ordenar la tabla resultante? os dejo la salida http://elpeloton.net46.net/ranking-ciclocross/
Una pregunta: tu sitio está funcionando bajo WordPress ¿Por qué no aprovechar su plataforma para desarrollar tu proyecto?. No sólo ahorrarías tiempo sino que dispondrías de un cúmulo de recursos para hacer lo que sea. WP dispone de múltiples métodos para modelar las consultas a gusto, crear tus propias taxonomías, tipos de artículos, etc, etc.

Veo que tienes el asunto algo adelantado, pero aún así vale la pena que replantees todo porque saldrás ganando.

Etiquetas: mysql, ranking
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




La zona horaria es GMT -6. Ahora son las 23:28.