gradicas por año

TABLE `carpetas` (
  `id` int(11) NOT NULL,
  `carpeta` varchar(255) NOT NULL,
  `year` int(11) NOT NULL,
  `procedimiento` varchar(250) DEFAULT NULL,
  `asignado_a` varchar(300) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;


<?php class Conexion { static public function conectar() { return new PDO("mysql:host=localhost;dbname=bdlaboral;charset=utf8", "root", ""); } } // Conectar a la base de datos $conexion = Conexion::conectar(); // Consulta para obtener el número total de carpetas $totalConsulta = $conexion->prepare("SELECT COUNT(*) as total FROM carpetas"); $totalConsulta->execute(); $totalResultado = $totalConsulta->fetch(PDO::FETCH_ASSOC); $totalCarpetas = $totalResultado['total']; // Consulta para obtener el número de carpetas por año $consulta = $conexion->prepare(" SELECT year, COUNT(*) as total FROM carpetas GROUP BY year "); $consulta->execute(); $resultados = $consulta->fetchAll(PDO::FETCH_ASSOC); // Años deseados $años = ['2022', '2023', '2024']; $data = array_fill_keys($años, 0); // Actualizar datos con los resultados de la consulta foreach ($resultados as $fila) { $data[$fila['year']] = $fila['total']; } // Separar los labels y datos $labels = array_keys($data); $datos = array_values($data); ?> <!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Carpetas por Año</title> <!-- Incluir Chart.js desde una CDN --> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> </head> <body> <div class="container"> <h1 class="mt-5">Número de Carpetas por Año</h1> <h2>Total carpetas: <?php echo $totalCarpetas; ?></h2> <canvas id="barChart" style="max-width: 600px; margin-top: 20px;"></canvas> </div> <script> // Datos obtenidos desde PHP var labels = <?php echo json_encode($labels); ?>; var data = <?php echo json_encode($datos); ?>; // Datos para la gráfica var chartData = { labels: labels, datasets: [{ label: 'Carpetas', data: data, backgroundColor: labels.map(function(label) { return label == '2022' ? 'rgba(255, 99, 132, 0.2)' : label == '2023' ? 'rgba(54, 162, 235, 0.2)' : 'rgba(255, 206, 86, 0.2)'; }), borderColor: labels.map(function(label) { return label == '2022' ? 'rgba(255, 99, 132, 1)' : label == '2023' ? 'rgba(54, 162, 235, 1)' : 'rgba(255, 206, 86, 1)'; }), borderWidth: 1 }] }; // Opciones de la gráfica var options = { scales: { y: { beginAtZero: true, title: { display: true, text: 'Total de Carpetas' } }, x: { title: { display: true, text: 'Año' } } }, plugins: { datalabels: { anchor: 'end', align: 'top', formatter: function(value) { return value; } } } }; // Configuración y renderización de la gráfica var ctx = document.getElementById('barChart').getContext('2d'); var myBarChart = new Chart(ctx, { type: 'bar', data: chartData, options: options }); </script> </body> </html>

Comentarios