Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

paginação mysql com ordenação de dados

29-04-2011 11:16

Olá! Estou tentando adaptar para uma paginação com mais links a ordenação dos resultados da paginação deste post Colocar-numero-ordenado-em-resultado-MySQL_19_5177.html , que somente possui os links "anterior" e "próxima".

Obtive sucesso parcial, pois quando acessados os links na ordem crescente, a ordem dos resultados em cada página é mostrada de forma crescente e sequencial em relação à página anterior. Entretanto, ao se acessarem os links de páginas de forma decrescente, a exibição dos resultados não é mostrada de tal forma.

Acredito que não estou sabendo utilizar as opções referentes às variáveis $valor e $voltar nos links das páginas.

Destaquei no código as adaptações feitas, e em cada link deixei as opções com as variáveis $valor e $voltar, estando uma delas comentada.

Creio que se deve deixar a variável correta no link devido. É possível me ajudarem nesse sentido?

Abaixo, segue o código:

<? $db = "database"; @mysql_connect("localhost", "root", "") or trigger_error(mysql_error(),E_USER_ERROR); mysql_select_db($db); #Consulta a ser feita no MySQL $sql = "SELECT * FROM tabela ORDER BY campo DESC"; #Número de registros paginados por página $registros_pagina = "3"; #Resgatamos a página que estiver sendo acessada pela paginação $lista = (int)$_GET["lista"]; #Se for a página inicial da consulta, a variável $lista será nula if(!$lista) { $pc = "1"; } #Caso contrário, declaramos o valor atual da variável $lista else { $pc = $lista; } //INSERI ORDENAÇÃO CONFORME CÓDIGO WEB if($pc=="" || $pc=="1") { $valor = 0; } else { $valor = $_GET['valor']; } //FIM INSERI ORDENAÇÃO CONFORME CÓDIGO WEB $inicio = $pc - 1; $inicio = $inicio * $registros_pagina; #Limitamos a nossa consulta do MySQL para exibir apenas a quantidade máxima configurada mais acima $resultado = mysql_query("$sql LIMIT $inicio, $registros_pagina"); #Vamos agora consultar a quantidade total de registros $todos = mysql_query("$sql"); #Armazenamos a quantidade total de registros $tr = mysql_num_rows($todos); #Armazenamos o resultado da quantidade total de registros pela quantidade de registros por página $tp = $tr / $registros_pagina; #Se não houverem registros a se exibir, é acusado o retorno abaixo if(mysql_num_rows($resultado) < 1) { echo "Nenhum registro encontrado"; } #Caso contrário é exibido o resultado da consulta else { #Exibimos o resultado dos registros encontrados na consulta while($linha = mysql_fetch_array($resultado)) { //INSERI ORDENAÇÃO CONFORME CÓDIGO WEB $valor++; //FIM INSERI ORDENAÇÃO CONFORME CÓDIGO WEB $coluna = $linha["PlanoAnuncioNome"]; //INSERI ORDENAÇÃO CONFORME CÓDIGO WEB echo "$valor º - "; //FIM INSERI ORDENAÇÃO CONFORME CÓDIGO WEB echo "$coluna<br /><br />"; } #E por fim montamos os links da paginação $tp = ceil($tp); if($pc>1) { //INSERI ORDENAÇÃO CONFORME CÓDIGO WEB $volta = $_GET['valor']-$registros_pagina; //FIM INSERI ORDENAÇÃO CONFORME CÓDIGO WEB $anterior = $pc - 1; //ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB //echo "<a href=\"?lista=$anterior&valor=$valor\">[Anterior]</a> "; echo "<a href=\"?lista=$anterior&valor=$volta\">[Anterior]</a> "; //ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB //echo "<a href=\"?lista=$anterior\">[Anterior]</a> "; } for($i=$pc-5;$i<$pc;$i++) { if($i<=0) { } else { //ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB echo "<a href=\"?lista=$i&valor=$valor\">"; //echo "<a href=\"?lista=$i&valor=$volta\">"; //FIM ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB //echo "<a href=\"?lista=$i\">"; if($i=="$pc") { echo "<b>[$i]</b>"; } else { echo "[$i]"; } echo "</a> "; } } for($i=$pc;$i<=$pc+5;$i++) { if($i==$tp) { //ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB echo "<a href=\"?lista=$i&valor=$valor\">"; //echo "<a href=\"?lista=$i&valor=$volta\">"; //FIM ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB //echo "<a href=\"?lista=$i\">"; if($i=="$pc") { echo "<b>[$i]</b>"; } else { echo "[$i]"; } echo "</a> "; break; } else { //ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB echo "<a href=\"?lista=$i&valor=$valor\">"; //echo "<a href=\"?lista=$i&valor=$volta\">"; //FIM ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB //echo "<a href=\"?lista=$i\">"; if($i=="$pc") { echo "<b>[$i]</b>"; } else { echo "[$i]"; } echo "</a> "; if($i==$pc+5 && $tp>$pc+5) { //ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB echo " ... <a href=\"?lista=$tp&valor=$valor\">[$tp]</a>"; //echo " ... <a href=\"?lista=$tp&valor=$volta\">[$tp]</a>"; //FIM ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB //echo " ... <a href=\"?lista=$tp\">[$tp]</a>"; } } } if($pc<$tp) { $proxima = $pc + 1; //ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB echo " <a href=\"?lista=$proxima&valor=$valor\">[Próxima]</a>"; //echo " <a href=\"?lista=$proxima&valor=$volta\">[Próxima]</a>"; //FIM ADAPTEI ORDENAÇÃO CONFORME CÓDIGO WEB //echo " <a href=\"?lista=$proxima\">[Próxima]</a>"; } } ?>

Um abraço.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

paginação mysql com ordenação de dados

29-04-2011 11:31

Vou analisar o script original, quanto a ordenação ao voltar e retorno.
0
A melhor hospedagem para o seu site HostGator!
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: paginação mysql com ordenação de dados

29-04-2011 11:39

Acabei de testar aqui o script original e está funcionando sem problema.

Não sei se usou como base o script original, se não uso, você terá que pegar todas as variáveis para somar ou diminuir os valores junto ao link, no avançar e votar. Tem também que repetir os valores que são passados pelo link no script original.

De preferência usa o original, e se precisar adicionar algo ao original, posta aqui.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

paginação mysql com ordenação de dados

30-04-2011 00:36

O original funciona ok, mas os links são somente nas palavras "anterior" e "próxima", não havendo links nas páginas cujos números são exibidos. Eu consegui fazer a adaptação num outro código e vou tentar no código que postei acima. Se não conseguir, posto a dúvida, e se conseguir, posto o código alterado e funcionando.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

paginação mysql com ordenação de dados

30-04-2011 01:04

Blz.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

paginação mysql com ordenação de dados

01-05-2011 22:19

Suponha-se que há 65 registros num bd, eu limito a exibição de registros a 10 por página, então, haveria 7 páginas; em virtude do número registros, nas páginas 1 a 6 seriam exibidos 10 registros em cada uma, e na última, que sei qual é (7, identificada através de um código), haveria 5 registros. Há como eu vincular esses cinco registros à pagina 7? Não quero saber quais são, mas apenas mostrar que a última página possui 5 registros.

Nesse exemplo, eu sei que a última página é a 7 através desta consulta:
$consulta_total_paginas = "SELECT COUNT(*) as num FROM $tabela_relatorio where campo ..."; $resultado_total_paginas = mysql_fetch_array(mysql_query($consulta_total_paginas)); $resultado_total_paginas = $resultado_total_paginas[num]; Assim chego à última página: $limite_registros = 10;//quantidade de registros por página $ultima_pagina = ceil($resultado_total_paginas/$limite_registros);//ultima_pagina = total de páginas / itens por página, arredondado para cima.

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

paginação mysql com ordenação de dados

01-05-2011 22:24

Se é o que estou pensando, você pode pegar o 7 que deve estar passando pelo link, e comparar com esse cálculo que fez. Sendo igual, você usa o LIMIT para retornar somente a quantidade de registro que deseja.

Geralmente a paginação MySQL tem um LIMIT, que é usado para fazer exatamente esse cálculo, e retornar a quantidade de registros na página. Sendo assim, você tem só que manipular esses valores.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

paginação mysql com ordenação de dados

02-05-2011 20:44

Eu adaptei seu código para a ordenação dos registros para um código com várias páginas de links, e, multiplicando o número da página do link pelo número de registros por página, estava dando certo a ordem apresentada, exceto quanto à última página, pois tinha quantidade de registros inferior às demais. Assim, por exemplo, havendo 10 registros por página, e um total de 65 registros no banco de dados, como no exemplo acima, se eu clicava na página 6, aparecia a ordenação dos registros 51 a 60 (correta); porém, se eu clicava no link referente à página 7 (última página), aparecia a ordenação dos números 61 a 70, mas eu não tinha 70 registros no banco de dados, somente 65, então, a ordenação referente à página 7 deveria conter apenas os registros 61 a 65. É isso que eu gostaria de resolver. Há na paginação um LIMIT, percebi para o que serve. Pelo que você disse, para fazer o que eu pretendo, deveria fazer uma nova consulta no banco de dados?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

paginação mysql com ordenação de dados

02-05-2011 20:56

Porque não faz o seguinte, identifica a última página, quando chegar a essa página, você cria uma variável e incrementa ela por cada while, os 5 últimos por exemplo, no caso, esse valor incrementado vai dar o total de resultados da última página.

Daí, você subtrai o total de registros por esse valor incrementado, acho que dá certo.

if($pagina=="7") {
$valor = 0;
}

DENTRO DO WHILE
if($pagina=="7") {
$valor++;
}

ONDE FOR MOSTRAR O TOTAL DE RESULTADOS
$total = $total_de_registros-$valor;

echo "Mostrando de ... até $total";
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

paginação mysql com ordenação de dados

04-05-2011 10:35

Eu havia pensado nisso, mas não sabia como fazer. Vou tentar. Nesse mesmo código em que estou trabalhando, quero filtrar os registros entre meses e anos de um campo cuja data é formada por dia, mês e ano. A partir de campos select cheguei ao mês inicial e ao mês final, e ao ano inicial e ao ano final, mas não estou sabendo utilizar esses valores na consulta. Posso postar a dúvida aqui, ou posso abrir outro post sem haver fechado este?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

paginação mysql com ordenação de dados

04-05-2011 10:47

Se não for diretamente relacionado a paginação, é melhor abrir um novo post.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

paginação mysql com ordenação de dados

04-05-2011 11:32

Abri o post: viewtopic.php?f=19&t=6246. Vou tentar fazer a alteração que você indicou neste post.
0

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado