Listado completo de tutoriales

Temario del Tutorial30 - Cláusula Group By de SQL.


Entre las muchas posibilidades que nos brinda SQL, una es agrupar registros y obtener información resumida de tablas.

En nuestro problema, un listado interesante sería mostrar la cantidad de alumnos inscriptos por curso. Para resolver de una manera sencilla esta situación, SQL nos permite agrupar los registros de la tabla "alumnos" por la columna "codigocurso" y contar la cantidad de registros que hay por cada código de curso igual.

El programa que nos permite resolver este problema 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 count(alu.codigo) as cantidad,
                                               nombrecurso 
                                          from alumnos as alu
                                          inner join cursos as cur on cur.codigo=alu.codigocurso
                                          group by alu.codigocurso") or
    die("Problemas en el select:" . mysqli_error($conexion));
  while ($reg = mysqli_fetch_array($registros)) {
    echo "Nombre del curso:" . $reg['nombrecurso'] . "<br>";
    echo "Cantidad de inscriptos:" . $reg['cantidad'] . "<br>";
    echo "<hr>";
  }
  mysqli_close($conexion);
  ?>
</body>

</html>

Hay varias partes importantes en este código; primero, en el select indicamos que cuente la cantidad de registros de la tabla "alumnos":

  select count(alu.codigo) as cantidad, 
         nombrecurso 
      from alumnos as alu

Pero, como veremos más adelante, en 'cantidad' no se almacena la cantidad total de registros de la tabla "alumnos" debido a que más adelante empleamos la cláusula group by.

Como necesitamos rescatar el nombre del curso hacemos el apareo con la tabla "cursos":

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

Por último en la sentencia select de SQL disponemos la cláusula group by:

   group by alu.codigocurso

Con esta cláusula se hace un corte de control por cada grupo de registros que tienen el mismo código de curso almacenado.

Luego mostramos el nombre de curso con la cantidad de inscriptos para dicho curso:

  while ($reg = mysqli_fetch_array($registros)) {
    echo "Nombre del curso:" . $reg['nombrecurso'] . "<br>";
    echo "Cantidad de inscriptos:" . $reg['cantidad'] . "<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 muestre el nombre del curso, la cantidad de inscriptos y todos los inscriptos a dicho curso. Repetir esto con todos los cursos.

Es decir, en la página debe aparecer algo parecido a:


Nombre del curso:PHP
Cantidad de inscriptos:3
Nombres: Martinez Luis - Rodriguez Pablo - Gonzalez Ana

Nombre del curso:JSP
Cantidad de inscriptos:2
Nombres: Hernandez Hector - Roca Marta
Solución
pagina1.php

Ejecutar ejemplo

Retornar