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

Ayuda con una consulta

Estas en el tema de Ayuda con una consulta en el foro de Mysql en Foros del Web. Buenas que tal, bueno yo de base de datos no se mucho y porfavor quisiera que me ayuden. bueno mi consulta es la siguiente tengo ...
  #1 (permalink)  
Antiguo 15/12/2010, 15:41
 
Fecha de Ingreso: marzo-2009
Mensajes: 9
Antigüedad: 15 años, 8 meses
Puntos: 0
Ayuda con una consulta

Buenas que tal,

bueno yo de base de datos no se mucho y porfavor quisiera que me ayuden. bueno mi consulta es la siguiente

tengo 3 tablas cursos, alumno y alumno_curso(detalle). lo que yo quiero hacer es una consutla que me arroje los datos del alumno incluido los cursos que esta llevando, les dejo mis tablas

Código:
CREATE TABLE cursos(
id_curso INT(11) auto_increment,
nom_curso VARCHAR(200) NOT NULL,
PRIMARY KEY(id_curso)
);

CREATE TABLE alumno(
id_alum INT(15) auto_increment,
nom_ap VARCHAR(300) NOT NULL,
PRIMARY KEY(id_alum)
);

CREATE TABLE alumno_curso(
id_alum INT(15),
id_curso INT(11),
PRIMARY KEY (id_alum,id_curso)
);

digamos si tengo un alumno que se llame asi
Maria elena que pide informacion del CCNA Y CCENT

yo hice un query para que me seleccione las 3 tablas y muestre los datos incluido los cursos

Código:
SELECT * FROM alumno a INNER JOIN alumno_curso b ON a.id_alum=b.id_alum INNER JOIN cursos c ON b.id_curso=c.id_curso ORDER BY fecha_curso ASC
y eso me arroja lo siguiente

Código HTML:
+---------+---------------------+--------------+-------------+----------+-----------+--------------------+-----------+--------------------+----------------------+---------+----------+----------+-----------+----------+----------------------+--------------------+--------+
| id_alum | nom_ap            |tel_alum | cel_alum  | mail_alum          | modo_alum | fecha_alum         | user                 | id_alum | id_curso | id_curso | nom_curso | ruta_img | user                 | fecha_curso        | estado |
+---------+---------------------+--------------+-------------+----------+-----------+--------------------+-----------+--------------------+----------------------+---------+----------+----------+-----------+----------+----------------------+--------------------+--------+
|       1 | MARIA ELENA SALDA�A | 5353535  | 987624464 | [email protected] | amigo     | 13-12-2010 / 18:58 | Liz Paredes Torrejon |       1 |        1 |        1 | CCNA      | NULL     | Liz Paredes Torrejon | 13-12-2010 / 09:48 | 1      |
|       1 | MARIA ELENA SALDA�A | 5353535  | 987624464 | [email protected] | amigo     | 13-12-2010 / 18:58 | Liz Paredes Torrejon |       1 |        2 |        2 | CCENT     | NULL     | Liz Paredes Torrejon | 13-12-2010 / 10:37 | 1      |
+---------+---------------------+--------------+-------------+----------+-----------+--------------------+-----------+--------------------+----------------------+---------+----------+----------+-----------+----------+----------------------+--------------------+--------+
como ven me aparecen 2 resultados cada uno con el curso que solicito, no se si habra alguna forma de que solo me aparesca 1 resultado incluyendo los 2 cursos como por ejemplo


Código:
+---------+---------------------+--------------+-------------+----------+-----------+--------------------+-----------+--------------------+----------------------+---------+----------+----------+-----------+----------+----------------------+--------------------+--------+
| id_alum | nom_ap              | dias_dispo   | turno_dispo | tel_alum | cel_alum  | mail_alum          | modo_alum | fecha_alum         | user                 | id_alum | id_curso | id_curso | nom_curso | ruta_img | user                 | fecha_curso        | estado |
+---------+---------------------+--------------+-------------+----------+-----------+--------------------+-----------+--------------------+----------------------+---------+----------+----------+-----------+----------+----------------------+--------------------+--------+
|       1 | MARIA ELENA SALDA�A | LunesViernes | Tarde       | 5353535  | 987624464 | [email protected] | amigo     | 13-12-2010 / 18:58 | Liz Paredes Torrejon |       1 |        1 |        1 | CCNA , CCENT     | NULL     | Liz Paredes Torrejon | 13-12-2010 / 09:48 | 1      |
+---------+---------------------+--------------+-------------+----------+-----------+--------------------+-----------+--------------------+----------------------+---------+----------+----------+-----------+----------+----------------------+--------------------+--------+
la verdad he buscado pero no encuntro una solucion espero que me puedan ayudar
  #2 (permalink)  
Antiguo 16/12/2010, 05:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Ayuda con una consulta

El caso se puede solucionar, solamente necesita una invocación en el FROM por cada curso que quieras mostrar usando alias para las tablas de modo que no choquen los nombres de las columnas. Pero no se trata de un método práctico porque requeriría una invocación a la tabla CURSOS por cada posible relación, y además para que sea operativo deberías llamar a cada campo en el SELECT por su tabla y nombre de columna; no podrás en ese caso usar "SELECT * ..." porque se producirían duplicaciones de nombres.
El caso sería un
Código MySQL:
Ver original
  1. SELECT a, b, c, d, e, T1.f, T2.f, ...
  2. FROM tabla1 T1 INNER JOIN tabla2 T2 ON T1.campo1 = T2.campo1
  3. LEFT JOIN tabla3 T3 ON T2.campo1 = T3.campo1
  4. LEFT JOIN tabla3 T4 ON T2.campo1 = T4.campo1
Existe otra solución y es usar GROUP_CONCAT() sobre el campo del nombre de curso, pero eso requiere dos cosas: a) Hay que llamar a cada campo del SELECT por su tabla y columna; b) Hay que usar GROUP BY sobre los campos adecuados.
El resultado de este caso sería que en esa columna aparecerían todas las variaciones de nombres en una lista separada por comas (ese es el sentido de ese GROUP_CONCAT: encadenar agrupando).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: Ninguno
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 13:46.