obtenerTotalSolicitudes()
Explicación de la función actual:
function obtenerTotalSolicitudes($pdo) {
$stmt = $pdo->query("SELECT COUNT(*) as total FROM solicitudes");
return $stmt->fetch()['total'];
}Propósito: Cuenta el número total de registros en la tabla
solicitudesCOUNT(*): Función SQL que cuenta todos los registrosas total: Alias para el resultado del conteofetch()['total']: Obtiene el valor del campo 'total' del resultado
Implementación de paginación:
Aquí te muestro cómo paginar tus resultados:
1. Función para obtener datos paginados:
function obtenerSolicitudesPaginadas($pdo, $pagina = 1, $porPagina = 10) {
$inicio = ($pagina - 1) * $porPagina;
$stmt = $pdo->prepare("SELECT * FROM solicitudes LIMIT :inicio, :porPagina");
$stmt->bindValue(':inicio', $inicio, PDO::PARAM_INT);
$stmt->bindValue(':porPagina', $porPagina, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}2. Uso completo con paginación:
// Configuración
$porPagina = 10;
$pagina = isset($_GET['pagina']) ? (int)$_GET['pagina'] : 1;
// Obtener total de registros
$totalRegistros = obtenerTotalSolicitudes($pdo);
// Calcular total de páginas
$totalPaginas = ceil($totalRegistros / $porPagina);
// Obtener datos de la página actual
$solicitudes = obtenerSolicitudesPaginadas($pdo, $pagina, $porPagina);
// Mostrar resultados
foreach ($solicitudes as $solicitud) {
echo "ID: " . $solicitud['id'] . "<br>";
// ... más campos
}
// Mostrar navegación de paginación
echo "<div class='paginacion'>";
for ($i = 1; $i <= $totalPaginas; $i++) {
$activa = ($i == $pagina) ? "activa" : "";
echo "<a href='?pagina=$i' class='$activa'>$i</a> ";
}
echo "</div>";3. Versión mejorada con ordenamiento:
function obtenerSolicitudesPaginadas($pdo, $pagina = 1, $porPagina = 10, $orden = 'id DESC') {
$inicio = ($pagina - 1) * $porPagina;
$sql = "SELECT * FROM solicitudes ORDER BY $orden LIMIT :inicio, :porPagina";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':inicio', $inicio, PDO::PARAM_INT);
$stmt->bindValue(':porPagina', $porPagina, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}4. HTML para la paginación (mejorado):
<nav aria-label="Paginación">
<?php if ($pagina > 1): ?>
<a href="?pagina=<?= $pagina - 1 ?>" class="pagina-anterior">Anterior</a>
<?php endif; ?>
<?php for ($i = max(1, $pagina - 2); $i <= min($totalPaginas, $pagina + 2); $i++): ?>
<a href="?pagina=<?= $i ?>" class="<?= $i == $pagina ? 'activa' : '' ?>">
<?= $i ?>
</a>
<?php endfor; ?>
<?php if ($pagina < $totalPaginas): ?>
<a href="?pagina=<?= $pagina + 1 ?>" class="pagina-siguiente">Siguiente</a>
<?php endif; ?>
</nav>Puntos clave:
LIMIT: La cláusula SQL que permite paginar (
LIMIT inicio, cantidad)Cálculo del offset:
($pagina - 1) * $porPaginaTotal de páginas:
ceil($totalRegistros / $porPagina)Usar prepared statements para seguridad contra SQL injection
¿Te gustaría que profundice en algún aspecto específico de la paginación?
¿Qué es el offset?
En el contexto de paginación, el offset es el número de registros que debemos "saltar" o "desplazarnos" desde el inicio de los resultados para llegar al primer registro de la página que queremos mostrar.
Analogía: Un libro
Imagina un libro con 100 páginas y 10 líneas por página:
Si quieres leer la página 1: no te saltas ninguna línea (offset = 0)
Si quieres leer la página 2: te saltas las 10 primeras líneas (offset = 10)
Si quieres leer la página 3: te saltas 20 líneas (offset = 20)
Si quieres leer la página n: te saltas (n-1)*10 líneas
Fórmula del offset:
$offset = ($pagina_actual - 1) * $registros_por_pagina;Ejemplos prácticos:
| Página | Cálculo | Offset | Significado |
|---|---|---|---|
| 1 | (1-1)*10 | 0 | Saltar 0 registros |
| 2 | (2-1)*10 | 10 | Saltar 10 registros |
| 3 | (3-1)*10 | 20 | Saltar 20 registros |
| 5 | (5-1)*15 | 60 | Saltar 60 registros |
En SQL:
La cláusula LIMIT en MySQL/MariaDB usa:
LIMIT offset, cantidad
-- o --
LIMIT cantidad OFFSET offsetEjemplos:
-- Página 1: primeros 10 registros
SELECT * FROM solicitudes LIMIT 0, 10;
-- Página 2: siguientes 10 registros
SELECT * FROM solicitudes LIMIT 10, 10;
-- Página 3: siguientes 10 registros
SELECT * FROM solicitudes LIMIT 20, 10;En código PHP:
function obtenerPagina($pagina = 1, $porPagina = 10) {
$offset = ($pagina - 1) * $porPagina;
$stmt = $pdo->prepare("SELECT * FROM solicitudes LIMIT :offset, :porPagina");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':porPagina', $porPagina, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchAll();
}¿Por qué es importante?
Eficiencia: No traemos todos los registros, solo los necesarios
Rendimiento: Menos datos transferidos y procesados
Experiencia de usuario: Navegación ordenada through los resultados
El offset es esencial para decirle a la base de datos: "Oye, omite los primeros X registros y dame los siguientes Y registros".
¿Quieres que veamos un ejemplo más concreto con tu tabla de solicitudes?
Comentarios
Publicar un comentario