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

Ayuda con consulta multitablas

Estas en el tema de Ayuda con consulta multitablas en el foro de Mysql en Foros del Web. Hola Que tal. Tengo el siguiente problema, en una consulta multitablas, cuando agrego un ON o un Where, no muestra los datos, para ver si ...
  #1 (permalink)  
Antiguo 03/11/2010, 15:41
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 17 años, 5 meses
Puntos: 0
Ayuda con consulta multitablas

Hola Que tal.

Tengo el siguiente problema, en una consulta multitablas, cuando agrego un ON o un Where, no muestra los datos, para ver si alguien me puede ayudar dejo el código a continuación.
Código PHP:
Ver original
  1. <?php
  2.         include('conexion.class.php');
  3.  
  4.         $sql=" SELECT
  5.        mov.rut_trabajador,
  6.        tra.rut,
  7.        tra.rut_empresa,
  8.        emp.nombre,
  9.        tra.nombre,
  10.        tra.apellidos
  11.        
  12.        FROM ge_movimientos AS mov,
  13.        ge_trabajador AS tra,
  14.        ge_empresas AS emp
  15.        
  16.        ON ge_movimientos.rut_trabajador = ge_trabajador.rut";
  17.  
  18.  
  19.         $res=mysql_query($sql,Conectar::con());
  20.         While ($row=mysql_fetch_array($res))
  21.         {
  22.                 echo "Rut Trabajador : ", $row[0], " Nombre : ", $row[4]," ". $row[5];
  23.                 echo "<br />";
  24.                 echo "Rut Empresa : ", $row[2], " Empresa : ", $row[3];
  25.                 echo "<br />";
  26. }
  27.  
  28. ?>

Si saco el ON me entrega los datos repetidos, si pongo el ON o WHERE no muestra nada.
Estaré muy agradecido si alguien me puede ayudar, además que tengo que agregar otras tablas y otros datos, pero mientras no resuelva esto no quiero seguir con los demaś.

De antemano mil Gracias
Un Cordial saludo desde Valparaíso - Chile
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #2 (permalink)  
Antiguo 03/11/2010, 16:08
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, 4 meses
Puntos: 2658
Respuesta: Ayuda con consulta multitablas

Código MySQL:
Ver original
  1.         mov.rut_trabajador,
  2.         tra.rut,
  3.         tra.rut_empresa,
  4.         emp.nombre,
  5.         tra.nombre,
  6.         tra.apellidos
  7.         ge_movimientos mov INNER JOIN  
  8.         ge_trabajador tra ON mov.rut_trabajador = tra.rut INNER JOIN  
  9.         ge_empresas emp ON tra.rut_empresa = emp.rut;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/11/2010, 16:26
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Ayuda con consulta multitablas

Gracias gnzsoloyo por tu respuesta.

Hice lo que recomiendas y no pasa nada, no muestra ningún dato, el código quedo de la siguiente forma:
Código PHP:
Ver original
  1. <?php
  2.         include('conexion.class.php');
  3.  
  4.         $sql=" SELECT
  5.        mov.rut_trabajador,
  6.        tra.rut,
  7.        tra.rut_empresa,
  8.        emp.rut,
  9.        emp.nombre,
  10.        tra.nombre,
  11.        tra.apellidos
  12.        
  13.        FROM ge_movimientos mov
  14.        INNER JOIN ge_trabajador tra ON mov.rut_trabajador = tra.rut
  15.        INNER JOIN ge_empresas emp ON tra.rut_empresa = emp.rut ";
  16.  
  17.  
  18.         $res=mysql_query($sql,Conectar::con());
  19.         While ($row=mysql_fetch_array($res))
  20.         {
  21.                 echo "Rut Trabajador : ", $row[0], " Nombre : ", $row[5]," ". $row[6];
  22.                 echo "<br />";
  23.                 echo "Rut Empresa : ", $row[2], " Empresa : ", $row[4];
  24.                 echo "<br />";
  25. }
  26.  
  27. ?>
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #4 (permalink)  
Antiguo 03/11/2010, 16:39
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, 4 meses
Puntos: 2658
Respuesta: Ayuda con consulta multitablas

Bueno en ese caso lo que hay que hacer es ir desglosando para ver qué es lo que falla.
Primero, ¿qué devuelve esto:
Código MySQL:
Ver original
  1.         mov.rut_trabajador,
  2.         tra.rut,
  3.         tra.rut_empresa,
  4.         tra.nombre,
  5.         tra.apellidos
  6.         ge_trabajador tra INNER JOIN  
  7.         ge_movimientos mov ON tra.rut  = mov.rut_trabajador ;

Y luego qué devuelve esto:
Código MySQL:
Ver original
  1.         tra.rut,
  2.         tra.nombre,
  3.         tra.apellidos,
  4.         tra.rut_empresa,
  5.         emp.nombre
  6.         ge_trabajador tra INNER JOIN  
  7.         ge_empresas emp ON tra.rut_empresa = emp.rut;

Si las dos devuelven datos, habría que probar esto:

Código MySQL:
Ver original
  1.         mov.rut_trabajador,
  2.         tra.rut,
  3.         tra.rut_empresa,
  4.         emp.nombre,
  5.         tra.nombre,
  6.         tra.apellidos
  7.         ge_trabajador tra
  8.         INNER JOIN  
  9.         ge_movimientos mov ON tra.rut  = mov.rut_trabajador
  10.         INNER JOIN  
  11.         ge_empresas emp ON tra.rut_empresa = emp.rut;
__________________
¿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 03/11/2010, 17:01
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Ayuda con consulta multitablas

El primer trozo, no devuelve resultado,

el segundo
Código PHP:
Ver original
  1. #
  2. SELECT
  3.         mov.rut_trabajador,
  4.         tra.rut,
  5.         tra.rut_empresa,
  6.         emp.nombre,
  7.         tra.nombre,
  8.         tra.apellidos
  9. FROM
  10.         ge_trabajador tra
  11.         INNER JOIN  
  12.         ge_movimientos mov ON tra.rut  = mov.rut_trabajador
  13.         INNER JOIN  
  14.         ge_empresas emp ON tra.rut_empresa = emp.rut

Este código me devuelve i resultado que equivale al registro numero 2 de los datos, el registro numero uno no lo muestra.

y el tercer trozo de codigo no devuelve resultados.
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #6 (permalink)  
Antiguo 03/11/2010, 19:28
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, 4 meses
Puntos: 2658
Respuesta: Ayuda con consulta multitablas

Código MySQL:
Ver original
  1.         mov.rut_trabajador,
  2.         tra.rut,
  3.         tra.rut_empresa,
  4.         tra.nombre,
  5.         tra.apellidos
  6.         ge_trabajador tra INNER JOIN  
  7.         ge_movimientos mov ON tra.rut  = mov.rut_trabajador ;
Si esto no devuelve datos, el problema es simple: No hay trabajadores en la tabla ge_trabajador que estén vinculados a la tabla ge_movimientos .
Eso significa que no hay relación entre ambas entidades..., ergo, tu consulta original tampoco sirve.

Revisa los datos de ambas tablas. Fíjate por qué ningún movimiento tiene los mismos RUT que el empleado que debía hacerlo.
__________________
¿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 04/11/2010, 06:41
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Ayuda con consulta multitablas

Muchas Gracias gnzsoloyo, por tu ayuda.

Ahora me esta entregando los datos, aunque no son los que deseo, pero seguiré intentando, cambiando las opciones en ON y ver que va pasando.

No me entregaba bien los datos, porque los RUT no coincidian, habia uno que comenzaba con CERO, y ese no lo tomaba bien.

Muchísimas Gracias, me has ayudado mucho.
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #8 (permalink)  
Antiguo 04/11/2010, 07:02
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, 4 meses
Puntos: 2658
Respuesta: Ayuda con consulta multitablas

Por nada. Para eso andamos por acá...

Cualquier otra cosa, pregunta nomás.



P.D.: Revisa los formularios de ingreso de datos o las fuentes de datos que uses. Es crítico que impidas que los RUT ingresen mal porque de lo contrario el problema se repetirá. Normalmente eso se hace con los formularios, haciendo que el usuario no ingrese el RUT manualmente en todos los casos, sino que lo seleccione de una lista ya ingresada.
Mientras menos datos importantes el usuario debe ingresar a mano, más segura será la consistencia.
Trata de usar tablas InnoDB y genera las FK en las tablas más importantes. Eso ayuda a evitar metidas de pata.

No te olvides, como decía un colega mío, que "el mayor problema de los sistemas es la interfase silla-teclado"

O sea...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 04/11/2010 a las 07:09
  #9 (permalink)  
Antiguo 04/11/2010, 07:24
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Ayuda con consulta multitablas

Si, gracias por el consejo, eso hago, el inconveniente fue que esos datos los ingrese por phpmyadmin, y ese es mi rut y tengo la costumbre de ingresarlo con el CERO delante y seguramente el del movimiento lo ingrese por el formulario, y en el esta validado y los ingreso siempre en el mismo formato, gracias por tu preocupación.

Estoy utilizando InnoDB, aunque no se las diferencias ni como sacar mas provecho, ¿ A que te refieres con FK?.

Si sabes de algún manual bueno de InnoDB, me avisas por fa.
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #10 (permalink)  
Antiguo 07/11/2010, 08:01
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Ayuda con consulta multitablas

Hola gnzsoloyo.

Gracias a tu consejo, encontré información sobre Foreigh Key, y estuvo aprendiendo algo mas que no sabia, y pude crear mediante MysqlAdmin, claves primarias, indices y relaciones entre las tablas. Gracias.

Ahora a lo que me interesa, siguiendo con mi inconveniente de mi consulta, igual llego a un estado en que no me muestra los datos, voy a dejar la consulta como la tengo hasta ahora, he incorporado nuevos datos a la consulta, y voy dejar comentarios para que se entienda mejor, y donde me da los errores.

Código MySQL:
Ver original
  1. <?php
  2.         include('conexion.class.php');
  3.  
  4.         $sql=" SELECT
  5.        mov.rut_trabajador,                             /*0*/
  6.        mov.cod_haber,                                     /*1*/
  7.        mov.cod_descuento,                           /*2*/
  8.        mov.mes,                                                /*3*/
  9.        mov.anio,                                               /*4*/
  10.        tra.rut,                                                    /*5*/
  11.        tra.nombre,                                             /*6*/
  12.        tra.apellidos,                                          /*7*/
  13.        tra.rut_empresa,                                /*8*/
  14.        tra.cod_cargo,                                      /*9*/
  15.        tra.cod_afp,                                            /*10*/
  16.        tra.cod_salud,                                          /*11*/
  17.        emp.rut,                                                        /*12*/
  18.        emp.nombre,                                              /*13*/
  19.        car.codigo,                                                    /*14*/
  20.        car.nombre,                                                     /*15*/
  21.        car.sueldo_base,                                         /*16*/
  22.        afp.codigo,                                                     /*17*/
  23.        afp.nombre,                                                     /*18*/
  24.        sal.codigo,                                                     /*19*/
  25.        sal.nombre                                                      /*20*/
  26.  
  27.        FROM
  28.        ge_movimientos mov INNER JOIN
  29.        ge_trabajador tra ON mov.rut_trabajador = tra.rut INNER JOIN
  30.        ge_empresas emp ON emp.rut = tra.rut_empresa INNER JOIN
  31.        ge_cargos car, /* Si yo quito la coma y pongo un nuevo ON tra.cod_cargo = car.codigo ya no muestra nada */
  32.        ge_afps afp,
  33.        ge_salud sal,
  34.        ge_haber hab,
  35.        ge_descuentos des ";
  36.  
  37.         /* ahora sin el utimo ON me muestra todos los datos que necesito, pero muestra 48 veces los registros, en circunstancias que debiera mostrar solo 2. */
  38.         $res=mysql_query($sql,Conectar::con());
  39.  
  40.         While ($row=mysql_fetch_array($res))
  41.         {
  42.                 echo " Rut Trabajador : ", $row[0], " Nombre : ", $row[6]," ". $row[7];
  43.                 echo "<br />";
  44.                 echo " Rut Empresa : ", $row[8], " Empresa : ", $row[13];
  45.                 echo "<br />";
  46.                 echo " Cod. Cargo : ", $row[9], " Cargo : ", $row[15];
  47.                 echo " Sueldo Base : ", number_format($row[16],2,',','.');
  48.                 echo "<br />";
  49.                 echo " Cod. AFP : ", $row[17];
  50.                 echo " AFP : ", $row[18];
  51.                 echo " Cod. Salud : ", $row[19];
  52.                 echo " Salud : ", $row[20];
  53.                 echo "<br />";
  54.                 echo " Haber : ", $row[1];
  55.                 echo " Descuentos : ", $row[2];
  56.                 echo " FECHA  : ", $row[3],"-",$row[4];
  57.                 echo "<br />";
  58.                 echo "<hr />";
  59. }
  60.  
  61. ?>

Disculpa que te moleste, si no tienes ningún inconveniente, me puedes dar una mano por favor.

De ante mano Gracias.
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com

Etiquetas: Ninguno
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 04:40.