Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-03-2008
RataASP RataASP is offline
Registrado
 
Registrado: dic 2007
Posts: 4
Poder: 0
RataASP Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 14-03-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
No se muy bien, pero que te parece esto?

Código SQL [-]
SELECT idjugador, idetapa, SUM(puntos) AS subtotal 
FROM ranking 
GROUP BY idjugador WITH ROLLUP
ORDER BY subtotal desc, idetapa

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.
Responder Con Cita
  #3  
Antiguo 14-03-2008
RataASP RataASP is offline
Registrado
 
Registrado: dic 2007
Posts: 4
Poder: 0
RataASP Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 14-03-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Puedes probar con un procedimiento almacenado o generar algúna tabla temporal.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 20:51:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi