<?
Class G_Paginacao{
	/*
		Baseado no c�digo do Calvin
		http://phpbrasil.com/scripts/script.php/id/581
		Colocado em uma classe por Fabio Issamu Oshiro 13/8/2006
	*/
	var $registros_por_pagina;
	var $pagina,$paginaKey;
	var $query;
	var $currentPage;
	var $link_de_navegacao;
	function G_Paginacao(){
		$this->registros_por_pagina = 10; // auto explicativo
		$this->currentPage="?";
		$this->paginaKey="pagina";
	}
	function SetPaginacao($query){
		$this->pagina = empty($_GET[$this->paginaKey])? 1 : $_GET[$this->paginaKey]; // qual p�gina estamos visualizando?
		$pagina_anterior = $this->pagina - 1;
		$pagina_posterior = $this->pagina + 1;
		$registro_inicio = ($this->registros_por_pagina * $this->pagina) - $this->registros_por_pagina; 
		/*
		   Vamos calcular a p�gina anterior e posterior que estamos
		   Em seguida devemos calcular qual o ponto nos registros retornados na QUERY, acima,
		   atualmente devemos RECOME�AR a ler.
		   
		*/ 
		$resultado = mysql_query($query);
		$total_de_registros = mysql_num_rows($resultado); 
		/*
		   Descobrir qual o n�mero total de registros que a busca QUERY retorna
		*/ 

		if ($total_de_registros <= $this->registros_por_pagina) {
			$total_de_paginas = 1;
		}elseif (($total_de_registros % $this->registros_por_pagina) == 0) {
			$total_de_paginas = ($total_de_registros / $this->registros_por_pagina);
		}else{
			$total_de_paginas = ($total_de_registros / $this->registros_por_pagina) + 1;
		}
		/*
		   Neste peda�o se faz o c�lculo de n�mero de p�ginas que ser� preciso
		   dividir o resultado
		*/


		$total_de_paginas = (int) $total_de_paginas;
		/*
		   Caso o n�mero seja quebrado, transformar em n�mero inteiro
		*/

		if (($this->pagina > $total_de_paginas) || ($this->pagina < 0))
		{
			echo 'n�mero da p�gina inv�lido';
			exit;
		} 
		$query = $query . " LIMIT $registro_inicio, $this->registros_por_pagina";  
		/*
		   Aqui se faz a m�gica de limitar os resultados que vc deseja para a
		   p�gina ser do registro X at� Y

		   Caso tenha prestado aten��o no c�digo, perceber� que o segredo da pagina��o de resultados
		   se limita ao uso do recurso LIMIT do MySQL para limitar a busca para os registros que
		   vc quer mostrar na p�gina.

		   Explica��o sobre como funciona esse pequena parte do SQL.

		   A QUERY:  SELECT * FROM tabela_qualquer WHERE idnome='$idnome'
		   vai retornar o seguinte resultado
		   
		resultado   | idnome   |   nome        | coluna1  | coluna2
		0               1          manuel        xxx        yyy
		1               2          joaquim       xxx        yyy
		3               3          tereza        xxx        yyy 
		4               4          luiz          xxx        yyy
		5               5          francisco     xxx        yyy

		   A linha resultado 0 � a primeira linha dos resultados encontrados. A numera��o � 
		   a partir de ZERO e n�o 1 como se pensaria.

		   Se vc quizesse apenas os registros de joaquim a luiza vc faria esta query
		   
		   SELECT * FROM tabela_usuarios LIMIT 1,3

		   O que significa LIMIT 1,3?
		   Indica que vc quer 3 registros a partir da linha 1 da busca.

		*/ 
		$resultado = mysql_query($query);  
		?>
		<?
		/*
		* Se��o para criar link de navega��o entre as p�ginas
		* Vai aparecer como aqueles link do tipo
		*  
		* Anterior 1 2 [3] 4 5 Pr�ximo
		*/

		$this->link_de_navegacao = '';

		if ($total_de_paginas>1){
			/* link "anterior" */
			if($pagina_anterior)
			{
				$this->link_de_navegacao .= " <a href='$this->currentPage&$this->paginaKey=$pagina_anterior'>Anterior</a> ";
			}else{
				$this->link_de_navegacao .= " Anterior ";
			}
			for($i = 1; $i <= $total_de_paginas; $i++)
			{
				if($i != $this->pagina)
				{
					/* link individual para as outras p�ginas */
					$this->link_de_navegacao .= " <a href='$this->currentPage&$this->paginaKey=$i'>$i</a> ";
				}else{
					$this->link_de_navegacao .= " <b>$i</b> ";
				}
			}
			/* link "proximo" */
			if($this->pagina != $total_de_paginas)
			{
				$this->link_de_navegacao .= "<a href='$this->currentPage&$this->paginaKey=$pagina_posterior'>Pr�ximo</a>";
			} 
		}
		return $resultado;
	}
}
?>

Modo de Usar:

<?
$objPaginacao=new G_Paginacao;
//caso voc� queira alterar o n�mero de p�ginas exibidas
//$objPaginacao->registros_por_pagina=4;
//caso voc� tenha que usar outro nome no QueryString Ex: nomedasuapagina.php?paginacao2=2
//$objPaginacao->paginaKey="paginacao2";
$objPaginacao->currentPage="nomedasuapagina.php";
$result = $objPaginacao->SetPaginacao("Select * From Tbl_alguma where alguma_coisa='algo' order by sua_ordem");
$num=mysql_numrows($result);
if ($num==0){
	echo "<tr><td colspan='3'>vazio</td></tr>";
}
$i=0;
$objRua=new G_Rua();
While($i<$num){
	//seu c�digo para imprimir os resultados
}
?>
Aqui imprime os bot�es de Anterior 1 2 3 4 pr�ximo
<?=$objPaginacao->link_de_navegacao?>