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

Partiendo de un alumno, ver que profesores tiene asignados

Estas en el tema de Partiendo de un alumno, ver que profesores tiene asignados en el foro de Mysql en Foros del Web. SELECT DISTINCT profesores.nombre, IF(alumnos.id_alumno=65,alumnos.nombre,null) a FROM profesores LEFT JOIN alu_pro USING(id_profesor) LEFT JOIN alumno USING(id_alumno) ORDER BY profesores.nombre En la consulta me muestra la lista ...
  #1 (permalink)  
Antiguo 02/03/2019, 08:17
 
Fecha de Ingreso: enero-2008
Mensajes: 581
Antigüedad: 16 años, 10 meses
Puntos: 9
Partiendo de un alumno, ver que profesores tiene asignados

SELECT DISTINCT profesores.nombre, IF(alumnos.id_alumno=65,alumnos.nombre,null) a
FROM profesores
LEFT JOIN alu_pro USING(id_profesor)
LEFT JOIN alumno USING(id_alumno)
ORDER BY profesores.nombre

En la consulta me muestra la lista de profesores, informandome si este alumno esta asociado con algunos profesores, el problema que encuentro, es que me duplica un profesor, saliendo con NULL y el nombre de un alumno, cuando la fila repetida con NULL deberia desaparecer del resultado

La idea es pintar un formulario donde usando CHECKBOX se marquen los profesores vinculados a este alumno
  #2 (permalink)  
Antiguo 04/03/2019, 08:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Partiendo de un alumno, ver que profesores tiene asignados

Código MySQL:
Ver original
  1. SELECT DISTINCT profesores.nombre, alumnos.nombre
  2. FROM profesores
  3. LEFT JOIN alu_pro USING(id_profesor)
  4. LEFT JOIN alumno USING(id_alumno)
  5. where alumnos.idalumno=65
  6. ORDER BY profesores.nombre

Y porque no usas mejor el where en lugar del if? aqui te muestra el null porque si el alumno no es 65 entonces no cumple la condicion
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 05/03/2019, 03:26
 
Fecha de Ingreso: enero-2008
Mensajes: 581
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: Partiendo de un alumno, ver que profesores tiene asignados

Gracias por responder Libras

La idea es generar checkboxes por html con todos los profesores, y reciviendo el id_alumno, se marquen los checkboxes indicando que profesores tiene asignados ese alumno, los checkboxes restantes apareceran sin marcar, indicando así en el formulario de asignación las relaciones previas:

Ejemplo con 2 relaciones:
Juan -
Pedro -
Ana +
Bea -
Iria -
Pablo -
Julia +
  #4 (permalink)  
Antiguo 05/03/2019, 11:22
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Partiendo de un alumno, ver que profesores tiene asignados

Código MySQL:
Ver original
  1. select profesores.nombre, max(alumnos.nombre) from(
  2. SELECT DISTINCT profesores.nombre, IF(alumnos.id_alumno=65,alumnos.nombre,null) a
  3. FROM profesores
  4. LEFT JOIN alu_pro USING(id_profesor)
  5. LEFT JOIN alumno USING(id_alumno)
  6. ) as t1
  7. group by profesores.nombre
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 06/03/2019, 09:11
 
Fecha de Ingreso: enero-2008
Mensajes: 581
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: Partiendo de un alumno, ver que profesores tiene asignados

Gracias por responder Libras, creo que lo tengo aproximado a tú propuesta... primero listo los profesores, y luego en base a una subconsulta a la tabla relacionada compruebo las relaciones con un alumno, tengo duda por el uso de MAX(),


SELECT p.Nombre, IF((select count(*) FROM alu_pro ap WHERE sp.id_profesor=p.id_profesor AND id_alumno=65),'checked',null) checked
FROM profesor p ORDER BY p.Nombre

Etiquetas: select
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 11:31.