0

Realizo un sistemas de nomina el cual tengo problemas con el modulo de consultas tengo las tablas llamadas trabajador que es mi tabla principal de ahí viene las llaves foráneas de mis tablas "area", "puesto" y cg_turno. En mi modulo de inserción no tengo problema ya que inserto por descripción y en mi BD se insertan por ID. Lo que necesito es que muestre es la descripción en la interfaz gráfica ya que en mi BD esta registrado solo con los ID de las llaves foráneas. Gracias / Saludos.

<!DOCTYPE html>
<?php
session_start();
if (@!$_SESSION['user']) {
 header("Location:index.php");
}elseif ($_SESSION['rol']==2) {
 header("Location:index2.php");
}
?>
<html lang="en">
  

  
    <meta charset="utf-8">
    <title>Gesti&oacuten de Nómina</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    

    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet"/>

    <link rel="shortcut icon" href="assets/ico/favicon.ico">
    <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png">
    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png">
    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png">
    <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png">
  </head>
<body data-offset="40" background="images/fondotot.jpg" style="background-attachment: fixed">

<div id="page">
   <div class="header">
    <a href="#menu"></a>
    Sistema Integral de Nómina
   </div><br> </br>
   


<div class="container">
<header class="header">
<div class="row">
 <?php
 include("include/cabecera.php");
 ?>
</div>
</header>

  <!-- Navbar
    ================================================== -->

<div class="navbar">
  <div class="navbar-inner">
 <div class="container">
   <div class="nav-collapse">
  <ul class="nav">
   <li class=""><a href="index2.php">BIENVENIDO</a></li>
    
 
  </ul>
  <form action="#" class="navbar-search form-inline" style="margin-top:6px">
  
  </form>
  <ul class="nav pull-right">
  <li><a href="">Bienvenido <strong><?php echo $_SESSION['user'];?></strong> </a></li>
     <li><a href="desconectar.php"> Cerrar Sesión </a></li>    
  </ul>
   </div><!-- /.nav-collapse -->
 </div>
  </div><!-- /navbar-inner -->
</div>

<br />

    
             <p>&nbsp;&nbsp;&nbsp<strong>Impresi&oacute;n de Reporte</strong>
             <a href="app/reportes/reporte_trabajador.php" target="_blank"><img src="images/printer.png"  width="50" height="50" 



<!-- ======================================================================================================================== -->
<div class="row">
 
 
  
 <div class="span12">

  <div class="caption">
  
<!--///////////////////////////////////////////////////Empieza cuerpo del documento interno////////////////////////////////////////////-->
  <center><h2> Administración de Trabajadores Registrados</h2></center>
  <div class="well well-small">
  <hr class="soft"/>
  <center><h4>Trabajadores Registrados</h4></center>
  <div class="row-fluid">
  



   <?php

    require("connect_db.php");
    $sql=("SELECT * FROM trabajador");
 
//la variable  $mysqli viene de connect_db que lo traigo con el require("connect_db.php");
    $query=mysqli_query($mysqli,$sql);

    echo "<table border='1'; class='table table-hover';>";
     echo "<tr class='warning'>";
        echo "<td>No. de Control</td>";
      echo "<td>Nombre</td>";
      echo "<td>Apellido Paterno</td>";
      echo "<td>Apellido Materno</td>";
      echo "<td>NSS</td>";
      echo "<td>CURP</td>";
      echo "<td>RFC</td>";
      echo "<td>Puesto</td>";
      echo "<td>Area</td>";
      echo "<td>Turno</td>";
      echo "<td>Empresa</td>";
      echo "<td>Editar</td>";
      
     echo "</tr>";

       
   ?>
     
   <?php 
     while($arreglo=mysqli_fetch_array($query)){
       echo "<tr class='success'>";
         echo "<td>$arreglo[0]</td>";
         echo "<td>$arreglo[1]</td>";
      echo "<td>$arreglo[2]</td>";
      echo "<td>$arreglo[3]</td>";
      echo "<td>$arreglo[4]</td>";
      echo "<td>$arreglo[5]</td>";
      echo "<td>$arreglo[6]</td>";
      echo "<td>$arreglo[7]</td>";
      echo "<td>$arreglo[8]</td>";
      echo "<td>$arreglo[9]</td>";
      echo "<td>$arreglo[10]</td>";
         

         echo "<td><a href='actualizar_trabajador.php?id_control=$arreglo[0]'><img src='images/actualizar.gif' class='img-rounded'></td>";
      
      

      
     echo "</tr>";
    }


   ?>
   
      
          
     
  
  
  <div class="span8">
  
  </div> 
  </div> 
  <br/>
  


  <!--EMPIEZA DESLIZABLE-->
  
   <!--TERMINA DESLIZABLE-->



  
  
  </div>

  


  

<!--///////////////////////////////////////////////////Termina cuerpo del documento interno////////////////////////////////////////////-->
</div>

 </div>
</div>
<!-- Footer
      ================================================== -->


</div><!-- /container -->

    <!-- Le javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="bootstrap/js/jquery-1.8.3.min.js"></script>
    <script src="bootstrap/js/bootstrap.min.js"></script>
 </style>
 
 <?php
     include("includes/menus.php"); ?>
     </div>
     <!-- Placed at the end of the document so the pages load faster -->
  <!--<script src="includes/jquery-1.9.1.min.js"></script>-->
  <script src="js/bootstrap/js/bootstrap.min.js"></script>
  <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
  <script src="js/ie10-viewport-bug-workaround.js"></script>
  <!-- Add in any FooTable dependencies we may need -->
  <script src="js/moment.min.js"></script>
  <!-- Add in FooTable itself -->
  <script src="js/compiled/footable.js"></script>
  <!-- Initialize FooTable -->
  <script>
   jQuery(function($){
    $('.table').footable();
   });
  </script>
  </body>
  </html>
Oscar_DR
  • 83
  • 2
  • 9
  • 1
    Oscar bienvenido. Tu pregunta no termina de entenderse y en este caso, poner todo tu programa no ayuda mucho. Dices que quieres mostrar la `descripción`, pero no dices la descripción de qué. El problema se resuelve haciendo una consulta `SELECT` que una las diferentes tablas usando las columnas relacionadas. Luego lees el resultado y muestras lo que quieras. Para este caso habría sido más útil que hicieras una descripción de tus tablas y cómo se relacionan entre ellas. – A. Cedano Feb 14 '18 at 10:03
  • Hola A. Cedano. Mi tabla principal se llama trabajador lo cual tiene llaves foráneas de mis tablas "area"(sus campos son id_area, descripcion_area) "puesto"(sus campos son id_puesto, descripcion_puesto) y "ctg_turno"(sus campos son idctg_turno, descripcion) al hacer mi llamado de consulta se muestran todos los datos que estan insertados en la BD "trabajador", pero lo que necesito es que por ejemplo si el id_area que tiene el asignado en este campo 1 = descripcion que tiene asignado en este campo sistemas. – Oscar_DR Feb 14 '18 at 10:13
  • En mi código lo hago por arreglos pero no se como mostrar lo que tengo en el campo descripcion ya que me muestra el ID – Oscar_DR Feb 14 '18 at 10:13
  • Oscar es lo que te decía, necesitas hacer una consulta que una las tablas mediante `JOIN` usando las llaves primarias/foráneas de cada una. Por [ejemplo aquí](https://es.stackoverflow.com/a/67982/29967) puedes ver una consulta que une varias tablas. De ese modo obtienes las columnas que necesites de cada una de las tablas. Sería algo así más o menos: **`SELECT a.descripcion_area, p.descripcion_puesto FROM trabajador t INNER JOIN area a ON t.id_area=a.id_area INNER JOIN puesto p ON t.id_puesto=p.id_puesto`**. Tendrías que agregar en el SELECT las columnas de trabajador que quieres. – A. Cedano Feb 14 '18 at 10:23
  • [Este ejemplo es mucho más claro](https://es.stackoverflow.com/a/92678/29967) es idéntico al tuyo, un JOIN con tres tablas. Es algo así lo que tienes que hacer para obtener datos de las distintas tablas. – A. Cedano Feb 14 '18 at 10:30
  • Muchas gracias por sus comentarios. Saludos – Oscar_DR Feb 14 '18 at 10:54

1 Answers1

0

Para obtener datos de diferentes tablas relacionadas puedes unir (JOIN) cada tabla usando las columnas que las ponen en relación:

Por ejemplo:

SELECT 
        t.nombre,
        t.apellido,
        a.descripcion_area, 
        p.descripcion_puesto 
FROM trabajador t 
INNER JOIN area   a ON t.id_area=a.id_area 
INNER JOIN puesto p ON t.id_puesto=p.id_puesto

En esta consulta tú puedes:

  • obtener los campos que necesites de cualquiera de las tablas. Sólo tienes que poner el alias de la tabla, punto, nombre columna y listo.
  • nótese que hemos usado un alias para cada tabla, de forma intuitiva la primera letra que representaría cada tabla. No es necesario usar ...FROM tabla as t, con poner el nombre de la tabla seguido del alias es suficiente. Esta práctica simplifica la consulta, sobre todo cuando son varias columnas y/o nombres de tabla demasiado largos, para no tener que repetir en cada una nombre_tabla.col1, nombre_otra_tabla.colX...
  • el uso de INNER JOIN significa que traerá sólo los registros que tengan coincidencias en ambas tablas que se unen. Si quieres traer también aquellos que no tengan coincidencias en alguna de las tablas puedes usar LEFT JOIN... Hay otros tipos de JOIN, los puedes estudiar en la documentación de MySQL o en alguna de las preguntas/respuestas de Stackoverflow, por ejemplo esta: ¿Cuál es la diferencia entre un inner y un outer join?.
  • obtendrás así un conjunto de resultados que podrás leer por programación y presentar como lo necesites.

Espero te sirva.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221