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

mohican

paginacao de resultados php

20 mensagens neste tópico

Boas,

deparei-me com um problema...

estou a fazer um sistema de páginas e n sei como vou saber dependendo do resultado, quantas paginas são precisas.

eu tenho um limit de 15 registos por página... e no fim tenho um for que vai dizer-me quantas paginas são precisas ao todo e vai printar a paginacao (1, 2, 3...)

o problema é que com a query limit eu nca sei o total dos registos... :P há outra maneira de fazer isto ou tenho de fazer uma query para achar o total e outra para limitar as amostras?

abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Divides o número total de registos e divides por 15.

Depois verificas se o inteiro desse número é igual a esse número, e se não for, adicionas-lhe um.

Aí vai-te dar o número de páginas que precisas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu e a matematica n andamos propriamente de maos dadas, mas o que disseste eu sei  :P

a minha questão é que a query que faço vai limitada aos resultados que quero por pagina, ou seja, tenho de fazer duas queries à bd? uma para me devolver os registos que quero por pagina e outra para me devolver o total?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu se calhar fazia assim:

$str = "SELECT * FROM XPTO WHERE usas_o_critério_que te apetecer"

$result = $db->query($str);

$total_registos  = $db->num_rows($result);

$total_paginas = $total_registos / 15;

#------------------------------------aqui vou buscar a parte inteira do valor da divisão

$total_paginas = intval("$total_paginas");

if(fmod($total_registos,15)>0)

  {$total_paginas++;}

queres que te envie o código para poderes navegar entre páginas (anterior/seguinte)?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não, eu chego lá. obrigado :P

de qualquer maneira continuo com a minha dúvida :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não, queria uma alternativa, para nao fazer duas queries sempre q se muda de pagina

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fazes uma que vá buscar todos, e quando fazes show, só mostras 15.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok, até ai tambem tudo bem...

agora como é que a querie retorna todos os registos e eu com php so mostro do registo 15 ao 30? uso mysql_fetch_array($resultado)[15] .. [30] etc como se fosse um array normal?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim. Verificas se vai no 15º registo e se for, paras.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mais uma pequenita duvida... lol  :wallbash:

como descubro o ultimo registo a ser mostrado? aparentemente parecia fácil, porque é de 15 em 15...mas e se so houverem 7 registos? ele preenche-me os outros campos vazios...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fazes algo tipo isto.

if ($num == 15 or $num == mysql_num_rows($query)){
//Code
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tenho isto

for($i = $inicio; $i <= $last; $i++)
{
        $dados = mysql_fetch_array($resultado);
	if($i == $totalResultado) { 
		$i = $last;

o contador incrementa as vezes correctas, mas só apresenta um registo ($dados), que é que está mal?  :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok, até ai tambem tudo bem...

agora como é que a querie retorna todos os registos e eu com php so mostro do registo 15 ao 30? uso mysql_fetch_array($resultado)[15] .. [30] etc como se fosse um array normal?

Não. No teu SQL metes no final LIMIT 15, 30
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não. No teu SQL metes no final LIMIT 15, 30

Já está a funcionar como disse

$dados[$i] = mysql_fetch_array($resultado);
echo $dados[$i]['campo1'];
echo $dados[$i]['campo2'];

porque se meter o LIMIT 15, 30 não sei o total de registos. e não quero que sempre q se mude de página faça duas queries à bd.

no entanto esta parte já está ok, agora falta fazer a mudança de página. vou passar o nr da página no URL mas preferia outra maneira, logo vejo.

obrigado pelas ajudas :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não. No teu SQL metes no final LIMIT 15, 30

Só uma pequena correção.

O que ele deve colocar no fim do SQL é LIMIT 15,15, sendo o primeiro 15 um número inteiro que indica o número do registo inicial (na primeira página seria 0, na segunda 15, na terceira 30), e o segundo 15 indica que deverão ser seleccionados 15 registos após esse registo inicial.

porque se meter o LIMIT 15, 30 não sei o total de registos. e não quero que sempre q se mude de página faça duas queries à bd.

Duas queries à BD? É só um jovem.

'nyways, ainda bem que já conseguiste (embora não da melhor maneira). :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só uma pequena correção.

O que ele deve colocar no fim do SQL é LIMIT 15,15, sendo o primeiro 15 um número inteiro que indica o número do registo inicial (na primeira página seria 0, na segunda 15, na terceira 30), e o segundo 15 indica que deverão ser seleccionados 15 registos após esse registo inicial.

Exacto, falha minha. :D

Em relação ao total de registos, usa um SELECT count(*) para isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Duas queries à BD? É só um jovem.

'nyways, ainda bem que já conseguiste (embora não da melhor maneira). :D

uma como? tenho de fazer a querie para ir buscar todos os registos e depois a querie com limit. mas estou aberto a sugestões obviamente :P

Em relação ao total de registos, usa um SELECT count(*) para isso.

posso usar o count com o limit no mesmo select? ou uso dois select no mesmo querie?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

uma como? tenho de fazer a querie para ir buscar todos os registos e depois a querie com limit. mas estou aberto a sugestões obviamente :D

posso usar o count com o limit no mesmo select? ou uso dois select no mesmo querie?

Primeiro, é query, não querie (queries é o plural de query).

Segundo, não tens de ir buscar todos os registos, tens é de ir buscar a contagem.

Devo ter percebido mal o que disseste, sim terias de usar 2 queries, um para detectares o número total de registos e outro para ires buscar só 15 registos.

Já que estás aberto a sugestões (e daí criticas), digo-te desde já que ires buscar os registos todos para paginação é um péssimo método. Imaginemos que tens 150000 registos, vais estar a ir buscar os 150000 registos só para contares o número de registos?

Como o tirácio disse, usa o count:

SELECT COUNT(*) AS contagem FROM tabela

Depois, a minha sugestão seria passares um valor por query string (como 0, 1, 2, etc.) que depois seria interpretado e trabalhado.

Algo como:

$pagina = intval($_GET['pagina']);
$pagina*=15;
$registos = mysql_query("SELECT * FROM tabela LIMIT $pagina,15");

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