Codice PHP:
$salta = ((isset($_GET['skip'])?($_GET['skip']):(0));
$numperpagina = 4;
$numrecords = ...; // qui esegui una query per contare i record nel db
...
$dati=mysql_query('select * from NOME_TABELLA order by id desc limit '.$salta.', '.$numperpagina.'');
...
$salta_bk = max(0, $salta-$numperpagina);
$salta_fw = max($salta+$numperpagina, $numrecords);
...
print '<a href="....?skip='.$salta_bk.'>.....'; // INDIETRO
print '<a href="....?skip='.$salta_fw.'>.....'; // AVANTI
in pratica il LIMIT nella query è parametrizzato (puoi rendere variabile anche il numero di record per pagina) e passi come parametro il numero di record da saltare (0 per vedere la prima pagina, 4 per vedere la seconda e così via);
per generare il valore giusto per i link avanti/indietro il parametro "skip" si calcola sulla base di quello attuale.
Quando guardi la prima pagina:
indietro: skip=0, attuale: skip=0, successiva: skip=4
Quando guardi la seconda pagina:
indietro: skip=0, attuale: skip=4, successiva: skip=8
e così via... bisogna fare un controllo su prima/ultima pagina... ecco il perchè di quei "min" e "max"