Bases de Datos - Consulta para obtener datos de una tabla, teniendo condicionantes en otras tablas

 
Vista:
sin imagen de perfil

Consulta para obtener datos de una tabla, teniendo condicionantes en otras tablas

Publicado por Octavio (2 intervenciones) el 05/06/2014 17:43:05
Buen día, me gustaría que me ayudaran con un query para obtener datos de una tabla teniendo condicionantes en otras.
Estoy desarrollando un sistema en php y mysql para generar exámenes.
y éstas son las tablas:
Tabla examenes

id_examen|titulo |descripcion
------1--------titulo 1------descripcion 1
------2--------titulo 2------descripcion 2
------3--------titulo 3------descripcion 3

Tabla examenes_carreras

id_examen|id_carrera
------2---------------10
------2---------------11
------3---------------11

Tabla examenes_planteles

id_examen|id_plantel
------3---------------4

La explicación es ésta: el exámen 1, lo pueden hacer todos los estudiantes ya que no hay condicionante en carreras y planteles, el examen 2 lo pueden resolver los estudiantes que cursen la carrera 10 y 11 en cualquier plantel, y por último el examen 3, que solo pueden resolverlo los estudiantes de la carrera 11 y del plantel 4.

¿Cómo podría ser la consulta que nos devuelva los exámenes permitidos por estudiante teniendo en cuenta su carrera y plantel?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 12
Ha aumentado su posición en 2 puestos en Bases de Datos (en relación al último mes)
Gráfica de Bases de Datos

Consulta para obtener datos de una tabla, teniendo condicionantes en otras tablas

Publicado por Salvador (10 intervenciones) el 06/06/2014 09:15:49
Hola Octavio

Mira haber esta si te vale:
1
2
3
4
5
6
7
8
9
10
11
SELECT
    E.ID_EXAMEN
    ,E.TITULO
    ,E.DESCRIPCION
  FROM Examenes
    LEFT JOIN Examenes_Carreras AS EC
      ON EC.ID_EXAMEN = E.ID_EXAMEN
    LEFT JOIN Examenes_Planteles AS EP
      ON EP.ID_EXAMEN = E.ID_EXAMEN
  WHERE EC.ID_CARRERA = 10
        AND EP.ID_PLANTEL = 4
Modifica el WHERE a tu gusto

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta para obtener datos de una tabla, teniendo condicionantes en otras tablas

Publicado por Octavio (2 intervenciones) el 06/06/2014 15:47:30
Gracias por contestar.

Esta consulta que me das afirmativamente satisface cuando el examen tiene las dos condiciones del WHERE. Pero no devuelve los demás exámenes a los que podría acceder el estudiante.

Lo resolví haciendo la unión de casos de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
--Sin restricciones
SELECT id_evaluacion FROM examenes
WHERE
	id_evaluacion NOT IN(SELECT id_evaluacion FROM examenes_planteles)
	AND id_evaluacion NOT IN(SELECT id_evaluacion FROM examenes_carreras)
UNION
--restriccion plantel
SELECT id_evaluacion FROM examenes
WHERE
	id_evaluacion IN(SELECT id_evaluacion FROM examenes_planteles WHERE id_plantel=2)
	AND id_evaluacion NOT IN(SELECT id_evaluacion FROM examenes_carreras)
UNION
--restriccion carrera
SELECT id_evaluacion FROM examenes
WHERE
	id_evaluacion NOT IN(SELECT id_evaluacion FROM examenes_planteles)
	AND id_evaluacion IN(SELECT id_evaluacion FROM examenes_carreras WHERE id_carrera=101)
UNION
--cumplimiento de todos las restricciones al mismo tiempo
SELECT e.id_evaluacion FROM examenes as e
	JOIN examenes_planteles as p ON e.id_evaluacion=p.id_evaluacion
	JOIN examenes_carreras  as c ON e.id_evaluacion=c.id_evaluacion
WHERE p.id_plantel=2 AND c.id_carrera = 101
ORDER BY 1

Si se quisiera añadir más restricciones se tendría que incluir el las clausulas WHERE y crear las combinaciones de restricciones correspondientes.

Espero que a alguien le sirva y no pase horas y horas investigando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar