Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/01/2013, 13:00
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Contar (duda)

Hola chura78:

Hay que entender una cosa, cuando hablas de "sumar" en base de datos, es necesario hacer una agrupacion (GROUP BY). No entiendo muy bien cómo es que pretendes presentar la información, ya que por un lado mencionas los detalles y por otro los totales... sería conveniente que nos pusieras algunos datos de ejemplo, y que a partir de estos datos nos indiques qué es lo que quieres obtener como salida. Por lo pronto te doy dos ejemplos que igual y te pueden servir. Supongamos que tienes estos datos:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM jugadores;
  2. +------+---------+
  3. | id_j | jugador |
  4. +------+---------+
  5. |    1 | uno     |
  6. |    2 | dos     |
  7. |    3 | tres    |
  8. |    4 | cuatro  |
  9. |    5 | cinco   |
  10. +------+---------+
  11. 5 rows in set (0.00 sec)
  12.  
  13.  
  14. mysql> SELECT * FROM partidos;
  15. +------+------------+------------+----------+
  16. | id   | jugador_id | asistencia | fecha_id |
  17. +------+------------+------------+----------+
  18. |    1 |          1 | SI         |        1 |
  19. |    2 |          2 | NO         |        1 |
  20. |    3 |          3 | NO         |        2 |
  21. |    4 |          4 | SI         |        3 |
  22. |    5 |          5 | SI         |        3 |
  23. |    6 |          1 | SI         |        3 |
  24. |    7 |          2 | NO         |        3 |
  25. |    8 |          3 | NO         |        4 |
  26. |    9 |          4 | SI         |        4 |
  27. |   10 |          5 | SI         |        4 |
  28. |   11 |          1 | NO         |        5 |
  29. |   12 |          2 | SI         |        5 |
  30. +------+------------+------------+----------+
  31. 12 rows in set (0.00 sec)

Para obtener el número de partidos a los que asistió o faltó algún jugador lo puedes hacer asi:

Código MySQL:
Ver original
  1. mysql> SELECT jugador_id,
  2.     -> jugador,
  3.     -> SUM(IF(asistencia = 'SI', 1, 0)) total_asistencias,
  4.     -> SUM(IF(asistencia = 'NO', 1, 0)) total_faltas
  5.     -> FROM partidos
  6.     -> INNER JOIN jugadores ON partidos.jugador_id = jugadores.id_j
  7.     -> GROUP BY jugador_id, jugador
  8.     -> ORDER BY jugador_id;
  9. +------------+---------+-------------------+--------------+
  10. | jugador_id | jugador | total_asistencias | total_faltas |
  11. +------------+---------+-------------------+--------------+
  12. |          1 | uno     |                 2 |            1 |
  13. |          2 | dos     |                 1 |            2 |
  14. |          3 | tres    |                 0 |            2 |
  15. |          4 | cuatro  |                 2 |            0 |
  16. |          5 | cinco   |                 2 |            0 |
  17. +------------+---------+-------------------+--------------+
  18. 5 rows in set (0.04 sec)

Es decir, haces sumas condicionales, (en programación sería algo así como un contador tipo total = total + 1 para toda la tabla). Otra forma sería haciendo esto:

Código MySQL:
Ver original
  1. mysql> SELECT jugador_id,
  2.     -> jugador,
  3.     -> asistencia,
  4.     -> COUNT(id) total
  5.     -> FROM partidos
  6.     -> INNER JOIN jugadores ON partidos.jugador_id = jugadores.id_j
  7.     -> GROUP BY jugador_id, jugador, asistencia;
  8. +------------+---------+------------+-------+
  9. | jugador_id | jugador | asistencia | total |
  10. +------------+---------+------------+-------+
  11. |          1 | uno     | NO         |     1 |
  12. |          1 | uno     | SI         |     2 |
  13. |          2 | dos     | NO         |     2 |
  14. |          2 | dos     | SI         |     1 |
  15. |          3 | tres    | NO         |     2 |
  16. |          4 | cuatro  | SI         |     2 |
  17. |          5 | cinco   | SI         |     2 |
  18. +------------+---------+------------+-------+
  19. 7 rows in set (0.00 sec)

Dale un vistazo a las consultas, su continuas con problemas, pon los datos y dinos qué es lo que intentaste hacer.

Saludos
Leo.