Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: 1mpuls0 en 27 Diciembre 2012, 01:33



Título: Ayuda con consulta en mysql.
Publicado por: 1mpuls0 en 27 Diciembre 2012, 01:33
Hola.
Estoy realizando una consulta para obtener la cantidad de premios de un jugador de un premio en especifico, pero no lo consigo :/
Por ejemplo tengo la siguiente tabla.
El jugador 2 tiene el premio 5 un total de 3 veces y el jugador 3 tiene el premio 1 un total de 2 veces.

Código
  1. mysql> SELECT * FROM awards;
  2. +---------+--------+-------+-------+
  3. | SECTION | player | award | total |
  4. +---------+--------+-------+-------+
  5. |       1 |      2 |     5 |     1 |
  6. |       1 |      3 |     1 |     2 |
  7. |       2 |      2 |     5 |     2 |
  8. +---------+--------+-------+-------+
  9. 3 ROWS IN SET (0.00 sec)
  10.  
  11. mysql>
  12.  

Quiero obtejer el siguiente resultado.

Código
  1.  
  2. +---------+--------+-------+
  3. | award1| award5| player|
  4. +---------+--------+-------+
  5. |       2 |      0 |     3 |
  6. |       0 |      3 |     2 |
  7. +---------+--------+-------+
  8.  

Esto significa que player 3 tiene el award1 2 veces y el award5 0 veces. De igual forma player 2 tiene el award1 0 veces y el award5 3 veces.

Alguna sugerencia?.

Estoy intentando con esta parte en la consulta... :/ es para obtener la suma de los premios, pero necesito un alias para cada premio... awardi hasta awardn con sus respectivos jugadores y cantidades.

Código
  1. SELECT SUM(total), player FROM awards WHERE award=5 GROUP BY player
  2.  

Aquí les dejo la estructura de la tabla.

Código
  1. CREATE TABLE `awards` ( `section` INT(40) NOT NULL, `player` INT(20) NOT NULL, `award` INT(2) NOT NULL, `total` INT(2) NOT NULL, PRIMARY KEY (`section`,`player`,`award`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci
  2.  

Gracias


Título: Re: Ayuda con consulta en mysql.
Publicado por: Shell Root en 27 Diciembre 2012, 12:55
Optaría mejor por crear un procedimiento almacenado, -la opción más rapida :p-


Título: Re: Ayuda con consulta en mysql.
Publicado por: 1mpuls0 en 27 Diciembre 2012, 16:58
Gracias Shell Root.

Alguna idea de que debo hacer primero?... es decir.. agrupar por players, separar por awards o sumar?.
Aunque por otro lado los procedimientos me muestran el resultado pero al trabajar con mysql_fetch_array no me recoge los valores :/ (ya lo intenté así -> http://www.phpgang.com/mysql-stored-procedure-in-php_9.html y no funcionó, pero bueno ese es otro tema).

Alguna otra sugerencia?.

Saludos


Título: Re: Ayuda con consulta en mysql.
Publicado por: moikano→@ en 27 Diciembre 2012, 18:26
La estructura de la tabla no lo encuentro de mi gusto, ya que el total se puede calcular y no hace falta almacenarlo en una columna, pero supongo que tendrás tus razones para hacerla así.

Lo que quieres creo que se consigue con una subconsulta.

Mas o menos sería así, pero estoy con otras cosas y no tengo tiempo de pensar la subconsulta para ordenar el resultado.

Código:
SELECT award,count(award) as 'cantidad' ,player FROM awards GROUP BY player;

Este es el resultado:

Código:
+-------+----------+--------+
| award | cantidad | player |
+-------+----------+--------+
|     1 |        1 |      3 |
|     5 |        2 |      2 |
+-------+----------+--------+






Título: Re: Ayuda con consulta en mysql.
Publicado por: 1mpuls0 en 27 Diciembre 2012, 18:41
Gracias...

Si de hecho es una tabla de ejemplo y fue lo primero que se me ocurrió, la tabla original es más extensa... (más premios)

Lo que quiero es saber cuantos premios P1, P2, P3... PN tiene el jugador X y mostrar como una tabla de Premios, Cantidad y Jugadores.

La consulta que dices es más o menos lo que busco, pero en lugar de tener una columna llamada award sería cambiar el valor de un award por un nombre y colocarlo como columna (método del pivot) pero aun no lo consigo :/
Tal vez tendré que hacerlo con programación xD..

Gracias


Título: Re: Ayuda con consulta en mysql.
Publicado por: moikano→@ en 27 Diciembre 2012, 19:29
Citar
Tal vez tendré que hacerlo con programación

La verdad es que tengo mis dudas de si se puede sacar por consulta, ya que ahí estás creando una columna por cada premio.

No se, pero si retocas el resultado de la consulta que te mostré puedes ordenarlo fácilmente ya que realmente te saca cada premio por cada jugador.


Título: Re: Ayuda con consulta en mysql.
Publicado por: 1mpuls0 en 27 Diciembre 2012, 23:13
Al final parece que era algo muy simple.
Gracias por la ayuda.

Código
  1. SELECT
  2. player,
  3. SUM(award=1) AS name_award1,
  4. SUM(award=2) AS name_award2,
  5. SUM(award=3) AS name_award3,
  6. SUM(award=4) AS name_award4,
  7. SUM(award=5) AS name_award5,
  8. SUM(award=6) AS name_award6,
  9. SUM(award=7) AS name_award7,
  10. SUM(award=8) AS name_award8,
  11. SUM(award=9) AS name_award9,
  12. SUM(award=10) AS name_awardN
  13. FROM awards GROUP BY player
  14.  

Saludos