Ver Mensaje Individual
  #3 (permalink)  
Antiguo 10/10/2011, 08:49
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: Consulta Mysql

Hola p3rikl3s:

Tal como quieres presentar la información, es decir, con un dato en cada renglón, no es necesario hacer los JOIN's como los pone hendaviher, sino que tendrías que manejar tres consultas distintas (podrías hacer un UNION para que quedara como una sola consulta). Checa este script:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE seccion (seccion_codigo INT, seccion_letra VARCHAR(1));
  2. Query OK, 0 rows affected (0.36 sec)
  3.  
  4. mysql> INSERT INTO seccion VALUES (7, 'A');
  5. Query OK, 1 row affected (0.09 sec)
  6.  
  7. mysql> SELECT * FROM seccion;
  8. +----------------+---------------+
  9. | seccion_codigo | seccion_letra |
  10. +----------------+---------------+
  11. |              7 | A             |
  12. +----------------+---------------+
  13. 1 row in set (0.00 sec)
  14.  
  15. mysql> CREATE TABLE alumnos_por_genero (seccion INT, genero VARCHAR(1),
  16.     -> cantidad  INT);
  17. Query OK, 0 rows affected (0.36 sec)
  18.  
  19. mysql> INSERT INTO alumnos_por_genero VALUES (7, 'M', 10), (7, 'F', 15);
  20. Query OK, 2 rows affected (0.09 sec)
  21. Records: 2  Duplicates: 0  Warnings: 0
  22.  
  23. mysql> SELECT * FROM alumnos_por_genero ;
  24. +---------+--------+----------+
  25. | seccion | genero | cantidad |
  26. +---------+--------+----------+
  27. |       7 | M      |       10 |
  28. |       7 | F      |       15 |
  29. +---------+--------+----------+
  30. 2 rows in set (0.00 sec)
  31.  
  32. mysql> SELECT
  33.     -> CONCAT('Codigo de Seccion: ', seccion_codigo,
  34.     -> ' Seccion: ',  seccion_letra) campo
  35.     -> FROM seccion WHERE seccion_codigo = 7
  36.     -> UNION
  37.     -> SELECT CONCAT(IF (genero = 'M', 'Chicos: ', 'Chicas: '), cantidad) campo
  38.     -> FROM alumnos_por_genero WHERE seccion = 7;
  39. +---------------------------------+
  40. | campo                           |
  41. +---------------------------------+
  42. | Codigo de Seccion: 7 Seccion: A |
  43. | Chicos: 10                      |
  44. | Chicas: 15                      |
  45. +---------------------------------+
  46. 3 rows in set (0.00 sec)

Observa que la consulta final es la unión de dos subconsultas, el concat es sólo para agregar las descripciones tal y como las estás poniendo en tu ejemplo y el if es para poder diferenciar entre hombres y mujeres y agregar la descripción.

Para el caso de los uniformes podrías hacer algo similar, lo único que debes cuidar es que en las tres subconsultas tengas el mismo WHERE pues de lo contrario estarías mezclando resultados.

Código:
...
WHERE seccion_codigo = 7
UNION
...
WHERE seccion = 7
Finalmente te recuerdo que si vas a hacer una unión, EL NÚMERO DE CAMPOS DE CADA SUBCONSULTA DEBE SER EL MISMO.

Es importante también que cheques el performance de tu consulta, pues es posible que sea más rápido hacer tres consultas separadas que una sola, eso dependerá de la información en tus tablas.

Saludos
Leo.