Hola a todos, perdón por la tardanza en contestar. Hasta hoy no he tenido un día libre y no he podido proseguir con mi pequeño proyecto. En el mensaje inicial se me olvidó indicar que sólo llevo algunas semanas programando y estoy realizando este proyecto para adentrarme en el mundo de la programación, por lo que voy intentando aprender sobre la marcha según me voy encontrando dificultades e intentando resolverlas.
Por ahora sólo estoy trabajando en modo local desde mi ordenador. Sin subir nada a ningún hosting web.
¿Por qué no calculas las estadísticas de forma individual, cada cierto tiempo?
Si, la primera actualización será algo larga y tediosa. Pero después sólo tendrías que realizar "microactualizaciones". Actualizar a partir del último punto ya actualizado (inserta un campo que controle la fecha del último registro, para no duplicarlos; o algún método similar), y sólo tendrás que "trabajar" con regularidad para mantener la BD actualizada.
Un saludo.
Hola [MENTION=116391]Warmage[/MENTION], gracias por contestar. La idea es que la web cuente con un apartado para añadir resultados cada vez que se juegue un partido. En ese apartado sólo habrá que indicar el nombre de los jugadores, y el resultado.
Estos datos se almacenarán automáticamente en la base de datos (en la tabla "partidos"). Mi objetivo (y el objetivo de mi pregunta) es conseguir un código que tome esos datos de los partidos, calcule los puntos obtenidos por cada jugador (3 puntos por cada victoria) y los muestre en pantalla. Pero sin almacenar ningún dato. Es decir, que realice el cálculo cada vez que se entra en la web.
En cierta manera creo que es parecido a lo que me sugieres. Las "microactualizaciones" serían cada vez que añado el resultado de un partido a la base de datos. La diferencia es que se realizaría el cálculo de todos los partidos jugados cada vez que entras en la web, pero sería realizado de forma automática por el código.
La idea básica del código es lo que he explicado en el mensaje inicial. Hacer una consulta a la tabla de los resultados de los partidos, recorrer los resultados de los partidos con un "mysql_fecth_array", crear una variable automáticamente para cada jugador del partido y asignarle 3 puntos al ganador y 0 al perdedor.
No sé muy bien como hacerlo. El código que tengo desarrollado por ahora para ir probando es el siguiente:
PHP:
$sql = "SELECT * FROM `partidos` ORDER BY `fecha_partido` ASC";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
if ($row['juegos_local'] > $row['juegos_visitante']){
$punt_jug[$row['id_jugador_local']] = $punt_jug[$row['id_jugador_local']] + 3;
} else {
$punt_jug[$row['id_jugador_visitante']] = $punt_jug[$row['id_jugador_visitante']] + 3;
}
}
El problema es que no sé donde ni como iniciar las variables $punt_jug donde debería ir acumulando la puntuación de cada jugador que haya jugado un partido.
No se Como es la puntuación en tenis pero por lo que comentas estas bien encaminado supongo que la id del jugador local y visitante son las de la tabla de jugadores. Entonces podrías crear una nueva tabla de puntuaciones donde pondrás la id del jugador y el puntaje. Entonces cada resultado que cargos debes hacer una consulta del tipo si id jugador local gana entonces en la tabla de puntuaciones buscas la id de jugador local y le sumas 3 a su puntuación, si id jugador visitante ganó le sumas 3 a ese jugador en su resultado. Para mostrar el renting ordenas de mayor a menor por resultados y muestras el total, con la id de jugador puedes mostrar nombres y otros datos. Estoy en el teléfono si quieres pasame algún código por mi o por aquí y en la mañana te doy una mano
Hola [MENTION=19531]Voldemorth[/MENTION], muchas gracias por contestar. Correcto las id del jugador local y visitante son las mismas de la tabla de jugadores. Sin embargo la idea es no almacenar nada en la base datos, sólo realizar el cálculo mediante código cada vez que entras en la web. No sé si se podría hacer alguna tabla temporal o utilizar algún método que desconozco, mis conocimientos de programación son limitados. Sólo estoy aprendiendo por ahora.
Un compañero del foro me recomendó almacenar solamente los datos imprescindibles y programar con el código todos los que se pudieran obtener a partir de los que están almacenados. Me interesa esta idea ya que creo que es lo adecuado en caso de tener que modificar algún resultado almacenado en la base de datos ya que así se recalcularían las puntuaciones automáticamente.
La consulta SQL sería algo como
SELECT *, (SELECT count(*) FROM TABLAPARTIDOS WHERE (id_jugador_local= TABLAJUGADORES.ID AND juegos_local > juegos_visitante) OR (id_jugador_visitante = TABLAJUGADORES.ID AND juegos_visitante > juegos_local)) AS PartidosGanados FROM TABLAJUGADORES
Eso debería devolver, en caso de ejecutar el "Mysqlfetcharray" un array con todos los datos de la tabla original y, además, un campo(o key) extra llamado "PartidosGanados" (No dará 3 puntos, pero puedes multiplicarlo por 3 si así lo deseas, no conozco bien como funciona el ranking en tenis)
La verdad no lo he probado, pero teóricamente debería funcionar
Hola [MENTION=117704]OmarCoder[/MENTION], muchas gracias por responder. He probado la consulta que me has sugerido adaptándola a los nombres de los campos de mis tablas y mostrándo los datos en pantalla en forma de tabla, pero me da el siguiente error:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Proyectos\Ranking Tenis\Clasificacion_general_codigo.php on line 33
Éste es el código que he utilizado:
PHP:
<?php
include ("includes/conexion.php");
$sql = "SELECT *, (SELECT count(*) FROM partidos WHERE (id_jugador_local= fichas_jugadores.ID_Jugador AND juegos_local > juegos_visitante) OR (id_jugador_visitante = fichas_jugadores.ID_Jugador AND juegos_visitante > juegos_local)) AS PartidosGanados FROM TABLAJUGADORES";
$result = mysql_query($sql);
echo "<table>";
echo "<tr>";//<tr>
echo "<td>POSICIÓN</td>";//<td>
echo "<td>ID</td>";
echo "<td>NOMBRE</td>";
echo "<td>APELLIDO 1</td>";
echo "<td>APELLIDO 2</td>";
echo "<td>PUNTOS</td>";
echo "<td>TEL</td>";
echo "<td>Nacimiento</td>";
echo "<td>Altura</td>";
echo "<td>Ganados</td>";
echo "</tr>";
$i=0;
while($row = mysql_fetch_array($result)) {
$i++;
echo "<tr>";
echo "<td>".$row[0]."</td>";
echo "<td>".$row[1]."</td>";
echo "<td>".$row[2]."</td>";
echo "<td>".$row[3]."</td>";
echo "<td>".$row[4]."</td>";
echo "<td>".$row[5]."</td>";
echo "<td>".$row[6]."</td>";
echo "<td>".$row[7]."</td>";
echo "<td>".$row[8]."</td>";
echo "<td>".$row[9]."</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($link);
?>
La línea del error es esta:
PHP:
while($row = mysql_fetch_array($result)) {
- - - Actualizado - - -
Hola a todos. He conseguido avanzar algo con el código que necesito. Como ya dije lo que intento conseguir es un código que me calcule la puntuación acumulada de los jugadores a partir de los resultados de los partidos almacenados en una tabla de la base de datos.
Realizo la consulta a la tabla y la recorro con un mysql_fetch_array.
PHP:
$sql = "SELECT * FROM `partidos` ORDER BY `fecha_partido` ASC";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
Después es necesario que se cree automáticamente una variable para cada jugador que aparezca en los resultados de los partidos para ir almacenando la puntuación que acumule por cada partido ganado (3 puntos). Pero antes de crear la variable hay que comprobar si ya está creada. Si la variable no existe se creará una utilizando el texto punt_jug y el ID del jugador.
PHP:
if (empty($punt_jug[$row['id_jugador_local']])){
$punt_jug[$row['id_jugador_local']] = 0;
}
if (empty($punt_jug[$row['id_jugador_visitante']])){
$punt_jug[$row['id_jugador_visitante']] = 0;
}
Ahora se analiza el resultado del partido. Si el marcador del jugador local es mayor que el del jugador visitante se sumarán a su variable 3 puntos. Si no es mayor se sumarán 3 puntos a la variable del jugador visitante.
PHP:
if ($row['juegos_local'] > $row['juegos_visitante']){
$punt_jug[$row['id_jugador_local']] = $punt_jug[$row['id_jugador_local']] + 3;
} else {
$punt_jug[$row['id_jugador_visitante']] = $punt_jug[$row['id_jugador_visitante']] + 3;
Este es el código completo:
PHP:
$sql = "SELECT * FROM `partidos` ORDER BY `fecha_partido` ASC";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
if (empty($punt_jug[$row['id_jugador_local']])){
$punt_jug[$row['id_jugador_local']] = 0;
}
if (empty($punt_jug[$row['id_jugador_visitante']])){
$punt_jug[$row['id_jugador_visitante']] = 0;
}
if ($row['juegos_local'] > $row['juegos_visitante']){
$punt_jug[$row['id_jugador_local']] = $punt_jug[$row['id_jugador_local']] + 3;
} else {
$punt_jug[$row['id_jugador_visitante']] = $punt_jug[$row['id_jugador_visitante']] + 3;
}
}
Ahora el problema que me encuentro es que no soy capaz de mostrar las variables donde se encuentran almacenadas las puntuaciones de cada jugador.
¿Hay algún método para mostrar en pantalla todas las variables que tengo definidas?
Gracias por adelantado, un saludo.
- - - Actualizado - - -
Hola todos. Sigo avanzando con el código. He conseguido mostrar las variables obtenidas con las puntuaciones acumuladas de cada jugador calculadas a partir de los resultados de los partidos y todo está correcto.
Pero ahora no sé cómo seguir. La verdad es que en ningún momento he tenido claro como realizar esta parte de la web. Ahora necesito que mostrar en pantalla las variables ordenadas de mayor a menor y el ID del jugador al que corresponde. No sé ni por donde empezar. Creo que quizá la única opción sea almacenar las puntuaciones en una columna de la tabla de jugadores y trabajar con eso.