Я делал более короткий вариант. Детально расписывать каждую строчку не буду, думаю и так всё понятно. Возможно, есть недостатки:
Сначала получаем количество рядков:
$bd=mysql_connect("localhost","login","password");
$res=mysql_query("SELECT count(*) FROM table",$bd);
$row=mysql_fetch_row($res);
$total_articles_number = $row[0]; //количество рядков, которое мы получили запросом
$articles_per_page=30; //кол-во записей на странице
$total_pages = ceil($total_articles_number/$articles_per_page); //делим кол-во рядков на количество записей на странице и округляем до следующего целого, что бы получить количество страниц.
if($_GET[page]==0){$_GET[page]=1;} Т.к. нулевой страницы у нас не будет, заменяем ее на первую по-умолчанию.
$npage=(($_GET[page]-1)*$articles_per_page); //получаем начальное число для LIMIT…
$result=mysql_query("SELECT * FROM `se` ORDER BY `id` DESC LIMIT $npage, $articles_per_page",$bd);
printf("<td>"); //тут уже выводим сами странички…
for ($i=1; $i<$total_pages+1; $i++)
{
printf("<a href=\"?page=$i\">$i</a>");
}
printf("</td>");
учись расскрашивать