Temario del Tutorial54 - mysqli (POO) - listado tabla articulos


Ahora implementaremos el listado completo de la tabla articulos y recuperaremos la descripción del rubro que se encuentra en la otra tabla.

Tenemos que utilizar el comando select y la cláusula join para el emparejamiento con la tabla rubros.

El código completo de la página es:

<!doctype html>
<html>
<head>
  <title>Listado de artículos</title>
  <style>
  .tablalistado {
    border-collapse: collapse;
    box-shadow: 0px 0px 8px #000;
    margin:20px;
  }
  .tablalistado th{  
    border: 1px solid #000;
    padding: 5px;
    background-color:#ffd040;      
  }  
  .tablalistado td{  
    border: 1px solid #000;
    padding: 5px;
    background-color:#ffdd73;      
  }
  </style>
</head>  
<body>
  
  <?php
    $mysql=new mysqli("localhost","root","","base1");
    if ($mysql->connect_error)
      die("Problemas con la conexión a la base de datos");
  
    $registros=$mysql->query("select ar.codigo as codigoart,
                                     ar.descripcion as descripcionart,
                                     precio,
                                     ru.descripcion as descripcionrub 
                                  from articulos as ar
                                  inner join rubros as ru on ru.codigo=ar.codigorubro") or
      die($mysql->error);
     
    echo '<table class="tablalistado">';
    echo '<tr><th>Código</th><th>Descripción</th><th>Precio</th><th>Rubro</th></tr>';
    while ($reg=$registros->fetch_array())
    {
      echo '<tr>';
      echo '<td>';
      echo $reg['codigoart'];
      echo '</td>';      
      echo '<td>';
      echo $reg['descripcionart'];      
      echo '</td>';      
      echo '<td>';
      echo $reg['precio'];      
      echo '</td>';      
      echo '<td>';
      echo $reg['descripcionrub'];      
      echo '</td>';            
      echo '</tr>';      
    }    
    echo '<table>';    
    
    $mysql->close();

  ?>  
</body>
</html>

Creamos alias para los campos que tienen el mismo nombre en las tablas de articulos y rubros. También creamos alias para las dos tablas con las que trabajamos.

En el from indicamos la tabla principal que estamos consultando que es la tabla articulos y luego con la cláusula inner join procedemos a indicar el nombre de la tabla relacionada y los dos campos por los que se emparejan: ru.codigo=ar.codigorubro

Luego dentro del while debemos hacer referencia a los alias que hemos creado:

    while ($reg=$registros->fetch_array())
    {
      echo '<tr>';
      echo '<td>';
      echo $reg['codigoart'];
      echo '</td>';      
      echo '<td>';
      echo $reg['descripcionart'];      
      echo '</td>';      
      echo '<td>';
      echo $reg['precio'];      
      echo '</td>';      
      echo '<td>';
      echo $reg['descripcionrub'];      
      echo '</td>';            
      echo '</tr>';      
    }    

En el navegador obtenemos una salida similar a esta:

listado

Otras variaciones

Podemos no utilizar alias y acceder por medio de un índice numérico a cada columna de los campos que recupera el select:

    $registros=$mysql->query("select ar.codigo as codigoart,
                                     ar.descripcion as descripcionart,
                                     precio,
                                     ru.descripcion as descripcionrub 
                                  from articulos as ar
                                  inner join rubros as ru on ru.codigo=ar.codigorubro") or
      die($mysql->error);
	 
    echo '<table class="tablalistado">';
	echo '<tr><th>Código</th><th>Descripción</th><th>Precio</th><th>Rubro</th></tr>';
    while ($reg=$registros->fetch_array())
    {
      echo '<tr>';
      echo '<td>';
      echo $reg[0];
      echo '</td>';	  
      echo '<td>';
      echo $reg[1];	  
      echo '</td>';	  
      echo '<td>';
      echo $reg[2];	  
      echo '</td>';	  
      echo '<td>';
      echo $reg[3];	  
      echo '</td>';	        
      echo '</tr>';	  
    }	
    echo '<table>';	

Como vemos ahora hacemos referencia a cada elemento por medio de un subíndice numérico que indica la posición del campo en el select: echo $reg[0];

La primer posición es la cero, luego sigue la uno y así sucesivamente.

NO PODEMOS indicar en el subíndice una cadena con el carácter punto: echo $reg['ar.descripcion'];



Problema resuelto.

Copiar el contenido de este cuadro de texto al NotePad++ y grabarlo en la carpeta c:\wamp\www con un nombre con extensión php (si hay varios cuadros de texto grabar cada uno en un archivo distinto).
luego abrir el navegador (Chrome, FireFox, IExplorer etc.) y en la barra de direcciones tipear: http://localhost/pagina1.php (o el nombre del archivo que le dió)

pagina1.php

Ejecutar ejemplo

Retornar