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

saber cuantos cursos toman los alumnos, en una sola consulta

Estas en el tema de saber cuantos cursos toman los alumnos, en una sola consulta en el foro de PostgreSQL en Foros del Web. Hola forer@s, tengo una tabla de alumnos , id_alumno, nombre una tabla de cursos, id_curso, nombre y una tabla intermedia que los relaciona, id_alumno, id_curso ...
  #1 (permalink)  
Antiguo 02/07/2013, 14:02
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 14 años, 2 meses
Puntos: 45
saber cuantos cursos toman los alumnos, en una sola consulta

Hola forer@s,

tengo una tabla de alumnos , id_alumno, nombre

una tabla de cursos, id_curso, nombre

y una tabla intermedia que los relaciona, id_alumno, id_curso

me gustaría saber como puedo mostrar los registros de la tabla con un solo query

es decir,

Alumno pepe:

-PHP
-Sql
-Ajax

Alumno Pepito

-Sql
-CSS

etc etc etc..

yo lo logré, pero con varias consultas realizando ciclos en PHP, pero el rendimiento baja mucho, porque por cada alumndo es una consulta nueva.

Me gustaría saber si hay alguna forma en que pueda realizar esto con una sola consulta.

gracias
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #2 (permalink)  
Antiguo 02/07/2013, 14:43
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: saber cuantos cursos toman los alumnos, en una sola consulta

Mira este pequeño laboratorio

Código SQL:
Ver original
  1. CREATE TABLE alumnos(id_alumno  INTEGER PRIMARY KEY,nombre VARCHAR(30));
  2.  
  3. CREATE TABLE cursos(id_curso  INTEGER PRIMARY KEY,nombre VARCHAR(30));
  4.  
  5. CREATE TABLE alumno_curso(id_alumno INTEGER,id_curso INTEGER,
  6. CONSTRAINT fk_alumnos FOREIGN KEY (id_alumno) REFERENCES alumnos(id_alumno),
  7. CONSTRAINT fk_cursos FOREIGN KEY (id_curso) REFERENCES cursos(id_curso));
  8.  
  9. INSERT INTO alumnos VALUES(1,'Daniel');
  10. INSERT INTO alumnos VALUES(2,'Monica');
  11. INSERT INTO alumnos VALUES(3,'Julieth');
  12.  
  13.  
  14. INSERT INTO cursos VALUES(1,'PHP');
  15. INSERT INTO cursos VALUES(2,'SQL');
  16. INSERT INTO cursos VALUES(3,'JAVA');
  17.  
  18. INSERT INTO alumno_curso VALUES(1,1);
  19. INSERT INTO alumno_curso VALUES(1,2);
  20. INSERT INTO alumno_curso VALUES(2,2);
  21. INSERT INTO alumno_curso VALUES(3,3);
  22. INSERT INTO alumno_curso VALUES(3,1);
  23.  
  24. SELECT al.nombre, array_agg(cu.nombre)
  25. FROM alumnos al
  26. INNER JOIN alumno_curso ac
  27. ON al.id_alumno=ac.id_alumno
  28. INNER JOIN cursos cu
  29. ON ac.id_curso=cu.id_curso
  30. GROUP BY al.nombre;
  31.  
  32. "Daniel";"{PHP,SQL}"
  33. "Julieth";"{JAVA,PHP}"
  34. "Monica";"{SQL}"
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 02/07/2013, 14:51
Avatar de hmvr414  
Fecha de Ingreso: marzo-2011
Ubicación: Santiago de Cali, Colombia
Mensajes: 74
Antigüedad: 13 años, 8 meses
Puntos: 16
Respuesta: saber cuantos cursos toman los alumnos, en una sola consulta

si las tablas son Alumno(id, nombre), Curso (id, nombre), Alumno_Curso (id_alumno, id_curso)

la consulta seria asi:

Código SQL:
Ver original
  1. SELECT a.nombre Alumno, c.nombre Curso FROM Alumno a, Alumno_Curso ac, Curso c
  2. WHERE a.id = ac.id_alumno AND c.id = ac.id_curso;

deberia devolver

pepe | php
pepe | sql
pepe | ajax
pepito | sql
pepito | css
  #4 (permalink)  
Antiguo 02/07/2013, 17:12
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 14 años, 2 meses
Puntos: 45
Respuesta: saber cuantos cursos toman los alumnos, en una sola consulta

hmvr414

bueno, lo que tu dices no funcionaria ya que como ves los nombres se repiten y eso no es lo que deseo, por que tendía que entrar a hacer validaciones.

huesos52

Muchas gracias por la solución, es algo muy interesante, no lo conocía
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x

Etiquetas: alumnos, as, cursos, sql
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 16:53.