FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Se me rompio el balero: Como Armar un Ranking con ASP y MySQL?
Hola:
Estoy intentando resolver un ranking que muestre una lista de jugadores que intervienen en un torneo de varias etapas, en las cuales obtienen puntos y éstos a su vez sumados conforman un total general que es que define el orden en el ranking. La base de datos de la cual parto es la siguiente (la cantidad de jugadores y etapas varian en forma dinámica): +-----------+------------+----------+---------+ | idranking | idjugador | idetapa | puntos | +-----------+------------+----------+---------+ | 1 | A | 1 | 6 | +-----------+------------+----------+---------+ | 2 | B | 1 | 8 | +-----------+------------+----------+---------+ | 3 | C | 1 | 10 | +-----------+------------+----------+---------+ | 4 | A | 2 | 10 | +-----------+------------+----------+---------+ | 5 | B | 2 | 6 | +-----------+------------+----------+---------+ | 6 | C | 2 | 8 | +-----------+------------+----------+---------+ | 7 | A | 3 | 8 | +-----------+------------+----------+---------+ | 8 | B | 3 | 6 | +-----------+------------+----------+---------+ | 9 | C | 3 | 10 | +-----------+------------+----------+---------+ La tabla que pretendo mostrar en la página con esta info es la siguiente: +----------+----------+----------+---------+--------+ | Jugador | Etapa 1 | Etapa 2 | Etapa 3 | Total | +----------+----------+----------+---------+--------+ | C | 10 | 8 | 10 | 28 | +----------+----------+----------+---------+--------+ | A | 6 | 10 | 8 | 24 | +----------+----------+----------+---------+--------+ | B | 8 | 6 | 6 | 20 | +----------+----------+----------+---------+--------+ En base a la estructura de la base de datos, pensaba en una instrucción SELECT de estas características: "SELECT idjugador, idetapa, SUM(puntos) AS subtotal FROM ranking GROUP BY idjugador WITH ROLLUP" Pero esta instrucción me devuelve una tabla de este tipo: +------------+---------+---------+ | idjugador | idetapa | puntos | +------------+---------+---------+ | A | 1 | 10 | +------------+---------+---------+ | A | 2 | 10 | +------------+---------+---------+ | A | 3 | 8 | +------------+---------+---------+ | Null | Null | 28 | +------------+---------+---------+ | B | 1 | 8 | +------------+---------+---------+ | B | 2 | 6 | +------------+---------+---------+ | B | 3 | 6 | +------------+---------+---------+ | Null | Null | 20 | +------------+---------+---------+ | C | 1 | 6 | +------------+---------+---------+ | C | 2 | 8 | +------------+---------+---------+ | C | 3 | 10 | +------------+---------+---------+ | Null | Null | 24 | +------------+---------+---------+ El tema es que no puedo ordenar esta info de modo de ir dibujándola en la página. Como estos resultados dejarían al jugdor C en primer lugar, luego al A y por último al B, hasta donde yo lo entiendo, lo que necesito es que la tabla me quede ordenada de la siguiente forma: +------------+---------+---------+ | idjugador | idetapa | puntos | +------------+---------+---------+ | C | 1 | 10 | +------------+---------+---------+ | C | 2 | 8 | +------------+---------+---------+ | C | 3 | 10 | +------------+---------+---------+ | Null | Null | 28 | +------------+---------+---------+ | A | 1 | 6 | +------------+---------+---------+ | A | 2 | 10 | +------------+---------+---------+ | A | 3 | 8 | +------------+---------+---------+ | Null | Null | 24 | +------------+---------+---------+ | B | 1 | 8 | +------------+---------+---------+ | B | 2 | 6 | +------------+---------+---------+ | B | 3 | 6 | +------------+---------+---------+ | Null | Null | 20 | +------------+---------+---------+ Estuve buscando en la web algún ejemplo que resuelva algo por el estilo pero no encontré nada. Podría alguien darme una mano con este tema. La verdad no se como resolverlo. Muchas Gracias, RataASP |
#2
|
||||
|
||||
No se muy bien, pero que te parece esto?
No se como es con MySQL o si te permite hacer el "order by", pero en Firebird, sería algo asi (excepto por lo del "rollup") Última edición por duilioisola fecha: 14-03-2008 a las 13:49:15. |
#3
|
|||
|
|||
Te agradezco la respuesta, pero GROUP BY y ORDER BY son mutuamente excluyentes. Es decir que o usas uno o el otro, no es posible usar ambos. Además, tampoco me sirve ordenar por subtotal, pues de ese modo estaria dandome una tabla que traería las filas agregadas de las sumas arriba y perderia el agrupamiento por jugador, cosa que necesito mantener para poder escribir la página con ASP.
Más lo penso y más me parece que es imposible obtener desde esa tabla con una unica consulta la estructura que necesito para dibujar la tabla con los resultados. Tal vez mediante la union de dos o mas tablas desde consultas separadas o algo asi, aunque no se me ocurre aún cómo. La otra alternativa es que deba cambiar la estructura de la base de datos, pero tampoco encontré un modo más adecuado para almacenar los resultados con la posibilidad de mantener en forma dinámica la cantidad de etapas y/o la cantidad de jugadores, es decir, que un determinado torneo puede tener 5 etapas y otro 7 etapas y que además en cada torneo haya jugadores que participen en una de ellas y otro no, incluso que haya jugadores que se sumen al torneo desde la etapa 3, por ejemplo. A ver si hay algún iluminado... RataASP Última edición por RataASP fecha: 14-03-2008 a las 13:57:23. |
#4
|
||||
|
||||
Puedes probar con un procedimiento almacenado o generar algúna tabla temporal.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Me caigo y me levanto... y me vuelvo a caer. Ranking 30 | Delphius | La Taberna | 0 | 18-05-2007 07:41:53 |
¿Cómo puedo armar esta consulta? | PaFernan99 | SQL | 4 | 02-03-2007 14:30:34 |
Error de tipos al armar herencia | supermilloriver | OOP | 4 | 26-04-2006 14:50:56 |
Un consejo sobre como armar una bd | Walterdf | Conexión con bases de datos | 4 | 11-05-2004 19:53:33 |
¿Cómo armar un foro en Delphi 7.0? | quiro_eze | Internet | 0 | 07-10-2003 00:12:11 |
|