Listado completo de tutoriales

Temario del Tutorial27 - Listado (selección de registros de varias tablas - INNER JOIN)


Ahora veremos como imprimir todos los alumnos inscriptos a los cursos junto al nombre del curso donde está inscripto. Los datos se encuentran en las tablas "alumnos" y "cursos".

Debemos aparear el código de curso de la tabla "alumnos" con el código de la tabla "cursos".

En caso de no recordar los conceptos de relaciones de tablas en SQL pueden repasar los mismos en el tutorial de MySQL Ya.

El código del programa que hace esto es el siguiente:

pagina1.php

<html>

<head>
  <title>Problema</title>
</head>

<body>
  <?php
  $conexion = mysqli_connect("localhost", "root", "", "base1") or
    die("Problemas con la conexión");

  $registros = mysqli_query($conexion, "select alu.codigo as codigo,
                                          nombre,
                                          mail,
			                  codigocurso, 
                                          nombrecurso 
                                     from alumnos as alu
                                     inner join cursos as cur on cur.codigo=alu.codigocurso") or
    die("Problemas en el select:" . mysqli_error($conexion));

  while ($reg = mysqli_fetch_array($registros)) {
    echo "Codigo:" . $reg['codigo'] . "<br>";
    echo "Nombre:" . $reg['nombre'] . "<br>";
    echo "Mail:" . $reg['mail'] . "<br>";
    echo "Curso:" . $reg['nombrecurso'] . "<br>";
    echo "<hr>";
  }
  mysqli_close($conexion);
  ?>
</body>

</html>

Hay varias cosas nuevas cuya sintaxis necesitamos analizar, la primera es como hacer el apareo con la tabla cursos:

   inner join cursos as cur on cur.codigo=alu.codigocurso 

Luego de las palabras claves inner join, indicamos la tabla que necesitamos aparear, podemos crear un alias de una tabla mediante la palabra clave as. En el resto de la consulta, en vez de indicar el nombre de la tabla, hacemos referencia al alias(generalmente un nombre más corto).

Seguidamente de la palabra clave on, indicamos los campos por los que apareamos las tablas, en nuestro caso el codigo de la tabla cursos con el codigocurso de la tabla alumnos.

Otro punto a tener en cuenta es indicar en el select que campos debemos rescatar de las tablas, es decir, indicarle a que tabla pertenece en el caso que tengan el mismo nombre:

  $registros = mysqli_query($conexion, "select alu.codigo as codigo,
                                          nombre,
                                          mail,
			                  codigocurso, 
                                          nombrecurso 
                                     from alumnos as alu
                                     inner join cursos as cur on cur.codigo=alu.codigocurso") or
    die("Problemas en el select:" . mysqli_error($conexion));

En este caso rescatamos el código del alumno (y no el código de curso). Debemos crear un alias si dos tablas tienen el mismo nombre de campo para evitar confusión; como ocurre aquí con el campo codigo de las tablas alumnos y cursos. También creamos un alias para la tabla alumnos.

Cuando rescatamos los datos y los mostramos en la página, hacemos referencia al alias del campo:

  while ($reg = mysqli_fetch_array($registros)) {
    echo "Codigo:" . $reg['codigo'] . "<br>";
    echo "Nombre:" . $reg['nombre'] . "<br>";
    echo "Mail:" . $reg['mail'] . "<br>";
    echo "Curso:" . $reg['nombrecurso'] . "<br>";
    echo "<hr>";
  }


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

Problema propuesto.

Confeccionar un programa que permita ingresar el código de un alumno y nos muestre su nombre, mail y nombre del curso en el cual está inscripto. Hacer un formulario donde se ingrese el código de alumno y otra página donde se muestren los datos respectivos. Mostrar un mensaje si no existe el código de alumno ingresado.

Solución
pagina1.php

Ejecutar ejemplo
pagina2.php

Retornar