Listado completo de tutoriales

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:

pagina1.php

<!doctype html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <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 VS Code y almacenarlo en la carpeta c:\xampp\htdocs con un nombre con extensión php.
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