• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

-IceBurn-

[Resolvido] Paginação: calcular a página respectiva a uma dada id

8 mensagens neste tópico

Boas!

Tou aqui com um dúvida em matemática, mas que como tambem tem a ver com  PHP resolvi postar aqui.

É o seguinte, fiz um sistema de paginação, até aqui tudo bem, agora o que queria implementar era uma forma de saber a página respectiva sabendo a ID (Neste caso o nome do campo é `id` um valor único que corresponde a cada entrada) da tabela.

Os dados que disponho logo à partida são os seguintes:

- Número total de 'rows'

- Número total de páginas

- Número de itens por página

Isto seria para ao clickar num URL do tipo http://site.com/index.php?id=218 ir logo para a respectiva página onde essa determinada ID aparece.

Alguem me pode ajudar?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se não houver registos apagados, é simples:

vamos supor que vais mostrar 25 registos por página... só tens de dividir 218 por 25 e somar 1 ao inteiro do resultado (com arredondamento por defeito)... no caso de o numero ser multiplo de 25, não somas 1...

exemplos:

17/25=0.68 -> 17%25=17 -> 0+1=1ª página

47/25=1.88 -> 47%25=22 -> 1+1=2ª página

218/25=8.72 -> 218%25=18 -> 8+1=9ª página

225/25=9 -> 225%25=0 -> 9ª página

isto está a supor que vais começar do id 1, ou seja, ordenamento ascendente... se for ao contrário, se a bd estiver com ordenamento descendente, subtrais o id ao total de rows e fazes o mesmo que acima mas com o resultado da subtracção...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito obrigado marinheiro, vou ver o que consigo fazer baseado na tua explicação e depois posto aqui os resultados. Até porque pode ser útil a mais alguem. Os dados são ordenados por ranking, não propriamente pela ordem de entrada na tabela, mas eu cá me arranjo. Mais uma vez, obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

cria uma tabela auxiliar, em que colocas os id's ordenados por ranking e, quando fizeres a listagem, o indice da listagem é o dessa tabela e os dados são os da original...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, tenho de ver a melhor maneira. É que são quase 2000 registos que estão constantemente a alterar as posições.... Mas eu cá me arranjo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se estão sempre a alterar, cria um array com os id's e ordenas a lista pelo indice do array...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado Nazgulled, mas já está resolvido.

Como prometido, aqui fica o estudo:

<?php
$id = "1112";

$sql = "SELECT `id` FROM `data` ORDER BY `hosts_today` DESC";

$qry = mysql_query($sql);

$y = 0;
$x = 0;
$r = 0;

while($obj = mysql_fetch_object($qry)) {

if($x == $y) { $y += 8; $r++; }

  if($obj->id == $id) {

 echo "Page: ".$r." --- SITE ID: ".$obj->id; 

break;

}

$x++;
}
?>

Não é bem o mais vistoso nem o método mais rápido, mas faz o serviço.  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora