Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta Mysql

Estas en el tema de Consulta Mysql en el foro de Mysql en Foros del Web. Hola amigos foreros, en esta ocasión me acerco a ustedes a ver si me dan una mano con el siguiente problema: Tengo tres tablas: seccion: ...
  #1 (permalink)  
Antiguo 09/10/2011, 08:52
Avatar de p3rikl3s  
Fecha de Ingreso: febrero-2009
Ubicación: Valencia
Mensajes: 216
Antigüedad: 15 años, 2 meses
Puntos: 9
Pregunta Consulta Mysql

Hola amigos foreros, en esta ocasión me acerco a ustedes a ver si me dan una mano con el siguiente problema:

Tengo tres tablas:

seccion:

| seccion_codigo | seccion_letra |
_ _ _ _7_ _ _ _ _ _ _ A_ _ _ _


alumnos_por_genero:

| seccion | genero | cantidad |
_ _ 7_ _ _ _ M _ _ _ _10_ _ _
_ _ 7_ _ _ _ F_ _ _ _ 15_ _ _


uniforme:

| seccion | prenda | cantidad |
_ _ 7_ _ _ _camisa_ _ _ _ 25_ _ _
_ _ 7_ _ _ _Pantalon_ _ _ 10_ _ _
_ _ 7_ _ _ _ Falda_ _ _ _ 15_ _ _


Como ven, son tres tablas relacionadas por la sección. Necesito saber como hacer una consulta que me traiga como resultado todos estos registros y como puedo mostrarlos en pantalla (¿a través de un while, while...do, for, foreach?) así:

Codigo de Seccion: 7 Seccion: A

Chicos: 10
Chicas: 15

Camisas: 25
Pantalon: 10
Falda: 15


Gracias de antemano!
__________________
También me hago llamar Tropiburguer. Sígueme en twitter: @tropiburguer
  #2 (permalink)  
Antiguo 10/10/2011, 08:10
 
Fecha de Ingreso: septiembre-2011
Ubicación: Colombia
Mensajes: 17
Antigüedad: 12 años, 7 meses
Puntos: 2
Mensaje Respuesta: Consulta Mysql

ESTA CONSULTA TE MUESTRA EN EL ORDEN QUE MENCIONO EL CÓDIGO DE LA SECCIÓN, LA LETRA DE LA SECCIÓN, LA PRENDA, CANTIDAD DE PRENDA, GENERO MASCULINO, CANTIDAD DE GENERO MASCULINO, GENERO FEMENINO, CANTIDAD DE GENERO FEMENINO:

NO SE EN QUE LENGUAJE ESTE TRABAJANDO DE TODAS FORMAS ES FÁCIL, CASI SIEMPRE UTILIZAN LA MISMA SINTAXIS, LA CONSULTA FUNCIONA AL 100% YA LE HICE LAS RESPECTIVAS PRUEBA, ESPERO TE SIRVA...

Código SQL:
Ver original
  1. SELECT s.seccion_codigo, seccion_letra, u.prenda, u.cantidad, ag.genero, ag.cantidad, ag2.genero, ag2.cantidad
  2. FROM (((seccion s INNER JOIN alumnos_por_genero ag ON s.seccion_codigo=ag.seccion AND ag.genero='M')
  3.      INNER JOIN uniforme u ON s.seccion_codigo=u.seccion)    
  4.      INNER JOIN alumnos_por_genero ag2 ON s.seccion_codigo=ag2.seccion AND ag2.genero='F')

Última edición por hendaviher; 10/10/2011 a las 08:12 Razón: NO SE VEÍA EL CÓDIGO
  #3 (permalink)  
Antiguo 10/10/2011, 08:49
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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.
  #4 (permalink)  
Antiguo 10/10/2011, 19:54
 
Fecha de Ingreso: septiembre-2011
Ubicación: Colombia
Mensajes: 17
Antigüedad: 12 años, 7 meses
Puntos: 2
Mensaje Respuesta: Consulta Mysql

lo que yo entedi fue que querias mostrar toda la informacion en una consulta, no cada campo por renglones, no se si entendi mal, en la respuesta que da el usuario p3rikl3s, nose si estoy mal, pero la consulta queda limitada solo a una seccion, la 7, mientras que en la que yo propongo muestra toda la informacion por fila:

en la tabla tengo la siguiente informacion:

alumnos_por_genero:
Código MySQL:
Ver original
  1. 7   M   10
  2. 7   F   15
  3. 8   M   23
  4. 8   F   5

seccion:
Código MySQL:
Ver original
  1. 7   A
  2. 8   B

uniforme:
Código MySQL:
Ver original
  1. 7   CAMISA      25
  2. 7   PANTALON    10
  3. 7   FALDA       15
  4. 8   SUDADERA    45
  5. 8   PANTALON    3

y el resultado que arroja la consulta que propongo es:
Código MySQL:
Ver original
  1. seccion_codigo  seccion_letra   prenda      cantidad    genero  cantidad_2  genero_2    cantidad_3
  2. 7       A       CAMISA      25      M   10      F       15
  3. 7       A       PANTALON    10      M   10      F       15
  4. 7       A       FALDA       15      M   10      F       15
  5. 8       B       SUDADERA    45      M   23      F       5
  6. 8       B       PANTALON    3       M   23      F       5

la consulta arroja por linea en el orden que menciono: codigo de la seccion, letra de la seccion, prenda del uniforme, cantidad de prenda del uniforme, sexo masculino, cantidad de genero masculino, sexo femenino, cantidad de genero femenino...

al final tu sabras cual te sirve...

saludos

Última edición por hendaviher; 10/10/2011 a las 19:56 Razón: falta informacion
  #5 (permalink)  
Antiguo 11/10/2011, 11:13
Avatar de p3rikl3s  
Fecha de Ingreso: febrero-2009
Ubicación: Valencia
Mensajes: 216
Antigüedad: 15 años, 2 meses
Puntos: 9
Respuesta: Consulta Mysql

hendaviher, leonardo_josue, gracias por su respuesta, ambas bastante acertadas. Sin embargo, la respuesta de leonardo_josue es mas adecuada a lo que necesito, había considerado hacer una consulta como la que muestra en su respuesta, sin embargo, como bien dice al final, a veces es mejor hacer las consultas por separado, y eso fue lo que hice de momento, hacer tres consultas por separado. Pero voy a probar con tu código a ver si resulta mas optimo.

Gracias!
__________________
También me hago llamar Tropiburguer. Sígueme en twitter: @tropiburguer
  #6 (permalink)  
Antiguo 11/10/2011, 19:26
 
Fecha de Ingreso: septiembre-2011
Ubicación: Colombia
Mensajes: 17
Antigüedad: 12 años, 7 meses
Puntos: 2
Respuesta: Consulta Mysql

no hay problem, estamos para ayudarnos ...

Etiquetas: registros, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:16.