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

Ayuda, consulta con 3 tablas, (ahora se duplican los resultados)

Estas en el tema de Ayuda, consulta con 3 tablas, (ahora se duplican los resultados) en el foro de Mysql en Foros del Web. hola, intento mostrar los datos de una consulta hacia 3 tablas, las tablas son: master horaingreso horasalida quiero mostrar: nombres(extraido de la tabla master) horaingreso(extraido ...
  #1 (permalink)  
Antiguo 23/10/2009, 13:32
 
Fecha de Ingreso: septiembre-2009
Mensajes: 54
Antigüedad: 14 años, 8 meses
Puntos: 0
Ayuda, consulta con 3 tablas, (ahora se duplican los resultados)

hola, intento mostrar los datos de una consulta hacia 3 tablas, las tablas son:

master
horaingreso
horasalida

quiero mostrar:
nombres(extraido de la tabla master)
horaingreso(extraido de la tabla horaingreso)
horasalida (extraido de la tabla horasalida)

relacione el id de la tabla horaingreso y horasalida con el id de la tabla master

ahora que quiero mostrar los datos hice esto:

Código PHP:
$query=mysql_query("SELECT master.nombres, horaingreso.horaingreso, horasalida.horasalida 
FROM master
INNER JOIN horaingreso
ON master.id=horasalida.docenteid
INNER JOIN horasalida
ON horaingreso.docenteid=horasalida.docenteid
"
,$conexion
pero me bota errror en la consulta (supplied argument is not a valid)
alguien podria ayudarme? llevo horas leendo manuales en la red pero tengo el mismo resultado

Última edición por Enfermin; 23/10/2009 a las 14:48 Razón: mas descrpcion
  #2 (permalink)  
Antiguo 23/10/2009, 13:59
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda, consulta con 3 tablas

la consulta SQL parece estar bien. Creo mas bien que tienes errores en el codigo php.
Ejecuta la consulta en phpmyadmin o cualquier gestor de mysql y dinos si presenta errores.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 23/10/2009, 14:11
 
Fecha de Ingreso: septiembre-2009
Mensajes: 54
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Ayuda, consulta con 3 tablas

Cita:
Iniciado por huesos52 Ver Mensaje
la consulta SQL parece estar bien. Creo mas bien que tienes errores en el codigo php.
Ejecuta la consulta en phpmyadmin o cualquier gestor de mysql y dinos si presenta errores.
gracias por la ayuda, intente hacer la consulta por consula y me muestra "Unknown 'horasalida.docenteid' in on clause"
pero dicha tabla y campo si lo tengo, hasta los tengo con datos.. alguien sabe a que se debe el error??

5 minutos despues: porfin me logro mostrar los datos PERO ahora se han duplicado los datos, y creo que hasta triplicado, alguien sabe porque?? use un while para mostrar los datos al estilo
Cita:
while($R=mysql_fetch_assoc($query)){
echo "<tr><td>".$R['nombres']."</td>";
echo "<td>".$R['horaingreso']."</td>";
echo "<td>".$R['horasalida']."</td></tr>";
}

Última edición por Enfermin; 23/10/2009 a las 14:28
  #4 (permalink)  
Antiguo 23/10/2009, 16:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda, consulta con 3 tablas, (ahora se duplican los resultados)

Código sql:
Ver original
  1. SELECT DISTINCT
  2.    M.nombres,  
  3.    HI.horaingreso,  
  4.    HI.horasalida
  5. FROM master M  
  6.    INNER JOIN horaingreso HI ON M.id=HI.docenteid  
  7.    INNER JOIN horasalida HS ON HS.docenteid=HS.docenteid;
El error es que hasta el momento en que ponías master.id=horasalida.docenteid , aún no se había leído la tabla horasalida, sino que correspondía poner horaingreso.

En cuanto a la duplicación de datos, hay tres posibilidades: Lo más probable es que haya en realidad más de un horario de entrada y salida asignado a la misma persona. Otra posibilidad es que se esté produciendo un error de interpretación por parte de MySQL porque le has puesto el mismo nombre a la tabla que a un campo de la tabla... lo que suele dar resultados erráticos. La otra posibilidad es que haya inconsistencias de información por repetición de entradas no detectadas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 24/10/2009, 08:51
 
Fecha de Ingreso: septiembre-2009
Mensajes: 54
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Ayuda, consulta con 3 tablas, (ahora se duplican los resultados)

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código sql:
Ver original
  1. SELECT DISTINCT
  2.    M.nombres,  
  3.    HI.horaingreso,  
  4.    HI.horasalida
  5. FROM master M  
  6.    INNER JOIN horaingreso HI ON M.id=HI.docenteid  
  7.    INNER JOIN horasalida HS ON HS.docenteid=HS.docenteid;
El error es que hasta el momento en que ponías master.id=horasalida.docenteid , aún no se había leído la tabla horasalida, sino que correspondía poner horaingreso.

En cuanto a la duplicación de datos, hay tres posibilidades: Lo más probable es que haya en realidad más de un horario de entrada y salida asignado a la misma persona. Otra posibilidad es que se esté produciendo un error de interpretación por parte de MySQL porque le has puesto el mismo nombre a la tabla que a un campo de la tabla... lo que suele dar resultados erráticos. La otra posibilidad es que haya inconsistencias de información por repetición de entradas no detectadas.
hola, gracias porr esponder, revise tus sugerencias pero la primera lo doy por descartado, en mi tabla 1 usuario solo tiene un horario unico tanto de entrada como de salida, luego lo de la interpretacion por parte de mysql, ya probe cambiando de nombre a la tabla horaingreso y horasalida, pero tengo el mismo resultado (resultados triplicados) pero lo ultimo no entendi bien, haber si me das un ejemplo de como hacerlo porfa necesito ayuda

5 minutos despyues: ahora resulta que cuando hago la misma consulta pero solo con 2 tablas si funciona la consulta sin datos duplicados, pero cuando uso 3 tablas, los datos se duplican

de esta forma funciona bien
Código PHP:
SELECT master.nombreshoraingreso.horaingreso
FROM master
INNER JOIN horaingreso
ON master
.id=horaingreso.docenteid 
pero cuando lo hago usando 3 tablas me duplica y/o triplica el resultado
Código PHP:
SELECT master.nombreshoraingreso.horaingresohorasalida.horasalida 
FROM master
INNER JOIN horaingreso
ON master
.id=horaingreso.docenteid
INNER JOIN horasalida
ON horaingreso
.docenteid=horasalida.docenteid 
alguien sabe porque pasa eso??

Última edición por Enfermin; 24/10/2009 a las 09:02
  #6 (permalink)  
Antiguo 24/10/2009, 13:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda, consulta con 3 tablas, (ahora se duplican los resultados)

Para que un INNER JOIN entre tres tablas devuelva dos registros aparentemente iguales, debe haber al menos en una de las tablas dos registros con el mismo valor en el campo de relación.
De lo contrario, no puede suceder.
En tu caso tienes tres tablas
MASTER(id, nombres)
HORAINGRESO(docenteid, horaingreso)
HORASALIDA(docenteid, horasalida)
Como estás haciendo id=docenteid=docenteid, para que ello suceda, solamente puede ocurrir si una de las tres tablas tiene un registro repetido...
Yo no veo otra posibilidad.

Verifica el contenido de las tablas 2 y 3...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 24/10/2009, 14:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda, consulta con 3 tablas, (ahora se duplican los resultados)

Cita:
onder, revise tus sugerencias pero la primera lo doy por descartado, en mi tabla 1 usuario solo tiene un horario unico tanto de entrada como de salida, luego lo de la interpretacion por parte de mysql, ya probe cambiando de nombre a la tabla horaingreso y horasalida, pero tengo el mismo resultado (resultados triplicados) pero lo ultimo no entendi bien, haber si me das un ejemplo de como hacerlo porfa necesito ayuda
En cualquier caso,es seguro que no probaste este ejemplo que te dí:
Código sql:
Ver original
  1. SELECT DISTINCT
  2.    M.nombres,  
  3.    HI.horaingreso,  
  4.    HI.horasalida
  5. FROM master M  
  6.    INNER JOIN horaingreso HI ON M.id=HI.docenteid  
  7.    INNER JOIN horasalida HS ON HS.docenteid=HS.docenteid;

La cláusula DISTINCT asegura que no existan repeticiones. Si las hay, deben forzosamente ser aparentes, por cuanto uno de las tres columnas en los registros repetidos debe ener un valor distinto al otro registro.

Prueba la sintaxis que te pongo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 07:12.