obtenerTotalSolicitudes()

 Explicación de la función actual:

php
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 solicitudes

  • COUNT(*): Función SQL que cuenta todos los registros

  • as total: Alias para el resultado del conteo

  • fetch()['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:

php
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:

php
// 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:

php
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):

html
<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:

  1. LIMIT: La cláusula SQL que permite paginar (LIMIT inicio, cantidad)

  2. Cálculo del offset($pagina - 1) * $porPagina

  3. Total de páginasceil($totalRegistros / $porPagina)

  4. 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:

php
$offset = ($pagina_actual - 1) * $registros_por_pagina;

Ejemplos prácticos:

PáginaCálculoOffsetSignificado
1(1-1)*100Saltar 0 registros
2(2-1)*1010Saltar 10 registros
3(3-1)*1020Saltar 20 registros
5(5-1)*1560Saltar 60 registros

En SQL:

La cláusula LIMIT en MySQL/MariaDB usa:

sql
LIMIT offset, cantidad
-- o --
LIMIT cantidad OFFSET offset

Ejemplos:

sql
-- 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:

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?

  1. Eficiencia: No traemos todos los registros, solo los necesarios

  2. Rendimiento: Menos datos transferidos y procesados

  3. 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

Entradas más populares de este blog

token

¿Qué es un token y cómo se utiliza en una API?

Generación de Credenciales API