PHP - Ocultar registros duplicados

   
Vista:

Ocultar registros duplicados

Publicado por Germán (9 intervenciones) el 13/02/2017 04:54:18
Buenas, tengo 2 tablas relacionadas por una FK.

>>>Tabla alumnos<<<

id_alumno dni apellido nombre


>>>Tabla alumnomaterias<<<

id_alumnomaterias dni(fk) nombre_materia turno


La relacion es 1 a n, en la cual un dni (en este caso 1 alumno) se puede inscribir a varias materias, por ende me duplica los dni.

Lo que necesito es listar los dni SIN DUPLICARLOS de los alumnos que cursan en turno vespertino.

Para ello utilizo esta función:

$consultirijilla = mysql_query("SELECT DISTINCT dni FROM alumnomaterias WHERE turno = ''TV");

En este caso me lista correctamente los dni de quienes cursan en TV, pero no me muestra los campos NOMBRE y APELLIDO, ya que estos están en la tabla ALUMNOS.

Entonces se me ocurrió hacer la siguiente sentencia en reemplazo de la anterior:

$consultirijilla = mysql_query("SELECT * FROM alumnos INNER JOIN alumnomaterias ON alumnos.dni = alumnomaterias.dni WHERE alumnomaterias.turno = 'TV'");

Aqui me lista los campos DNI, APELLIDO y NOMBRE como yo quería, PERO me duplica los DNI.


La solución debe estar en una mezcla entre ambas sentencias. Lo que se me ocurre es hacer un sub-select, pero lo probé y no muestra nada.

Alguien podria ayudarme?

Gracias.
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
Imágen de perfil de xve

Ocultar registros duplicados

Publicado por xve (6035 intervenciones) el 13/02/2017 15:18:25
Hola Germán, puedes utilizar la clausula GROUP BY... algo así:

1
$consultirijilla = mysql_query("SELECT * FROM alumnos INNER JOIN alumnomaterias ON alumnos.dni = alumnomaterias.dni WHERE alumnomaterias.turno = 'TV' GROUP BY alumnomaterias.dni");

Coméntanos, ok?
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

Ocultar registros duplicados

Publicado por Germán (9 intervenciones) el 14/02/2017 13:23:25
hola XVE gracias por tu respuesta, te cuento que lo probé y sigue sin funcionar, solo me muestra el dni sin duplicar, aún no logro que devuelva los campos apellido y nombre.

Por si acaso he revisado nuevamente las relaciones entre las 2 tablas de la consulta: alumnos y alumnomaterias y parece estar todo bien y coherente, de hecho si realizo otra consulta aunque salgan registros duplicados, me muestra los 3 campos, eso demuestra que las tablas están bien relacionadas.

Cuál será el problema?
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
Imágen de perfil de xve

Ocultar registros duplicados

Publicado por xve (6035 intervenciones) el 14/02/2017 15:15:44
Cuando ejecutas la consulta que te mostre, que te devuelve exactamente?

Si haces esta consulta, que te devuelve:
1
SELECT * FROM alumnos INNER JOIN alumnomaterias ON alumnos.dni = alumnomaterias.dni
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

Ocultar registros duplicados

Publicado por Germán (9 intervenciones) el 14/02/2017 16:24:52
Cuando ejecuto la consulta anterior me devuelve solamente los dni sin duplicar.

Ahora cuando ejecuto la última consulta me devuelve solamente los dni, pero duplicados.
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

Ocultar registros duplicados

Publicado por Germán (9 intervenciones) el 16/02/2017 04:43:09
Xve quería contarte que al final solucioné el problema de la siguiente manera y quería compartir el código por si alguien necesita algo similar, de hecho en cuanto pueda voy a subir el código completo.

Me estuve complicando innecesariamente tratando de vincular la tabla alumnos (id_alumno, dni, apellido, nombre) con la tabla alumnomaterias (id_alumnomaterias, dni(fk), nombre_materia, turno).

LÓGICA DE MI SISTEMA Y SOLUCIÓN:

a) Cuando el alumno se inscribe a las materias, las variables "dni y nombre_materia" se guardan en la tabla alumnomaterias

b) Decidí enviar también las variables "apellido y nombre" (de la tabla alumnos) como tipo Hidden en mi form.

PERO...

Utilizo 2 query distintos dentro del mismo formulario.

La primer Query es para insertar los datos dni y nombre_materia en la tabla alumnomaterias.

y la segunda Query es para agregar los campos "apellido y nombre" de la tabla alumnos a la tabla alumnomaterias.

y por último para mostrar los registros sin duplicados, lo resuelvo con un simple SELECT con GROUP BY:

"SELECT * from alumnomaterias WHERE turno ='TM' GROUP BY dni"

Listo!

Si a alguien le interesa, puedo armar un artículo con toda la explicación y código fuente del sistema.

GRACIAS xve, saludos.
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