Paginación con PHP y MySQL

En este post te mostraré de manera muy simple y sencilla cómo hacer una paginación de datos de MySQL usando PHP. Esto quiere decir que muestras los datos de la tabla por página, mostrando ciertos elementos por página.

Además de paginar los datos por tabla, también te enseñaré cómo crear enlaces que lleven a determinado número de página, cómo saber cuántas páginas puedes tener, etcétera.

Verás que la explicación es muy sencilla y después de esto podrás adaptar el código a tu software o tomar el ejemplo como está.

Nota: para este tutorial asumo que ya tienes las nociones básicas de PHP con MySQL, pero si no, no te preocupes, te invito a ver cómo conectar PHP con MySQL usando PDO y también te invito a ver un sistema de ventas en PHP para reafirmar tus conocimientos.

Algoritmo para paginar resultados

Primero vamos a analizar cómo es que funciona todo esto. Podemos tener una simple fórmula que nos permitirá sacar el número de páginas disponibles:

Páginas disponibles = RedondearHaciaArriba(Cantidad de datos / Datos a mostrar por página)

Estamos redondeando hacia arriba porque en ocasiones el resultado será un valor decimal, y si mostramos el resultado como tal, vamos a omitir algunos resultados porque las páginas no serán suficientes.

Ahora veamos cómo obtener esos datos. La cantidad de datos se puede obtener con un COUNT de SQL, y los datos a mostrar por página los definimos nosotros.

Para redondear hacia arriba usamos la función ceil que PHP ya ofrece. Y finalmente para obtener solo algunos valores usamos LIMIT y OFFSET de SQL igualmente.

LIMIT nos permite limitar los resultados, y OFFSET nos permite saltar determinados resultados. Por lo tanto LIMIT siempre será igual a la cantidad de datos a mostrar por página.

Por otro lado, el OFFSET se puede calcular con:

Offset = (Página actual - 1) * Datos por página;

Necesitamos restarle 1 porque en el caso de que la página sea 0, necesitamos que el OFFSET sea 0, pero para todo lo demás, necesitamos que sea la página – 1 multiplicada por los datos.

Con este enfoque, evitamos cortar arreglos y ahorramos memoria, aunque hacemos dos consultas a la base de datos: una para obtener el conteo, y otra para obtener los datos reales.

Dicho esto, veamos el código.

La base de datos

Para ejemplificar esto, tengo una simple base de datos que a su vez tiene una tabla de productos. La estructura, creación de base de datos y algunos datos de prueba se ven así:

Por el momento no te preocupes por la estructura de la tabla, al final de todo lo que nos interesa es hacer una paginación con PHP y MySQL.

Conexión PHP a base de datos

El archivo de conexión es el siguiente:

Este archivo lo vamos a usar para traer los valores. Recuerda cambiar las credenciales de acuerdo a tu entorno.

Paginación con PHP y MySQL

Paginación con PHP y MySQL

Ahora sí veamos el código. Definimos cuántos elementos vamos a mostrar por página:

El número de página se obtendrá de la URL pero si no se proporciona se asume que es la página 1:

Ahora calculamos el limit y offset:

Obtenemos el conteo de los productos, para ello hacemos un count. Usamos as para renombrar la columna.

Calculamos cuántas páginas tenemos:

Finalmente obtenemos los productos:

Luego los mostramos en una tabla:

Finalmente creamos los enlaces para navegar entre páginas. Además de los enlaces que llevan directamente a una página, mostramos el de página siguiente y página anterior. También mostramos la página actual y cuántas páginas existen.

Poniendo todo junto

Al final el código queda así:

Si te fijas, además del código he incluido el encabezado y pie que no hacen otra cosa más que agregar el menú de navegación, cerrar etiquetas, etcétera. Esto es porque he tomado como base el proyecto de punto de venta con PHP.

Conclusión

Para terminar te dejo el código completo en GitHub. Espero que este ejemplo te haya servido para que puedas implementar tu propia paginación, o que te haya servido como base.

Si te gusta el lenguaje, te invito a ver más sobre PHP en mi blog.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

3 comentarios en “Paginación con PHP y MySQL”

  1. Interesante, No uso php puro años pero lo entiendo. Estoy usando Codeigniter 3 un MVC pero para su paginacion se hace un mundo llamando a librerias internas etc. Lo bueno que puedes implementar codigo puro php. Me sirvio tu codigo solo tuve que cambiarle ciertas cosas como ejemplo el codigo php para las consultas sql ya que no lo usamos asi. pero todo lo demas normal y me funciono! gracias

    Como lo termine asi:

    # Cuántos productos mostrar por página
    $productosPorPagina = 24;
    // Por defecto es la página 1; pero si está presente en la URL, tomamos esa
    $pagina = $this->uri->segment(3,0);
    if($pagina==0 or $pagina==” or $pagina==null){
    redirect(base_url().’inicio/main/1′);
    }
    # El límite es el número de productos por página
    $limit = $productosPorPagina;
    # El offset es saltar X productos que viene dado por multiplicar la página – 1 * los productos por página
    $offset = ($pagina – 1) * $productosPorPagina;
    $sql = $this->db->query(‘select count(*) as conteo
    from tab_producto p where Estado=0 and Catalogo=0’);
    $data_1 = $sql->row_array();
    $conteo = $data_1[‘conteo’];
    # Para obtener las páginas dividimos el conteo entre los productos por página, y redondeamos hacia arriba
    $paginas = ceil($conteo / $productosPorPagina);

    $query = $this->db->query(“select *,
    (select Url from tab_imagenes where Posicion=1 and Id_producto=p.Id) as imagen_1,
    (select Url from tab_imagenes where Posicion=2 and Id_producto=p.Id) as imagen_2
    from tab_producto p where Estado=0 and Catalogo=0 limit “.$offset.”,”.$limit);
    foreach ($query->result() as $x)
    {
    echo $x->Id;
    }

Dejar un comentario