roboty, no es tan complicado como puede parecer.
Supongamos que por defecto queremos mostrar solo 10 registros por página. Así que ya tenemos una variable, la cantidad de registros a mostrar ($cantRegs = 10).
Luego queremos ir avanzando, es decir, que en la primera página muestre los primeros 10 registros, luego en la segunda página muestre los siguientes 10, y así sucesivamente. Esto a su vez es otra variable, la página en la que estamos actualmente ($pagActual = 1 [1 por defecto]).
Así que ahora hay que hacer el cálculo y definir la sintaxis de la consulta sql.
Variables :
Código PHP:
$cantRegs = 10; // 10 Registros por página
$pagActual = isset($_GET['pag']) ? (int)$_GET['pag'] : 1; // Si la página en la que nos encontramos no se especifica por la URL, usamos el valor 1 por defecto.
La consulta sql :
Código PHP:
// Esta consulta ...
SELECT * FROM tabla LIMIT 10 OFFSET pag_actual*10
// ... es lo mismo que esta
SELECT * FROM tabla LIMIT pag_actual*10, 10
Donde pag_actual es la variable con el valor 1, 2, 3, etc. Esto hace que por cada página que avancemos, el número de la página se multiplique por 10, haciendo que la consulta tome 10 registros partiendo desde el registro 11, o desde el 21, dependiendo de la página en la que nos encontremos.
Cita: La cláusula LIMIT puede usarse para restringir el número de registros retornados por el comando SELECT. LIMIT tiene uno o dos argumentos numéricos, que deben ser enteros positivos (incluyendo cero).
Con dos argumentos, el primer argumento especifica el desplazamiento del primer registro a retornar. El desplazamiento del registro inicial es 0 (no 1):
mysql> SELECT * FROM table LIMIT 5,10; # Retrieve rows 6-15
Por compatibilidad con PostgreSQL, MySQL también soporta la sintaxis LIMIT row_count OFFSET offset.
Por lo que finalmente tendríamos algo como esto :
Código PHP:
$cantRegs = 10;
$pagActual = isset($_GET['pag']) ? (int)$_GET['pag'] : 1;
// Me conecto a la BD
// Hago la consulta
$query = sprintf("SELECT * FROM tabla LIMIT 10 OFFSET %d", $pagActual*10);
$query = mysql_query($query) or die(mysql_error());
// Obtengo los resultados
// Imprimo...
Es tan simple coo eso. Luego para mejorarlo tendrías que agregar la típica numeración tipo google.
Espero haber sido claro. Saludos.