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

Sign in to follow this  
Ivan22

Paginação de site

Recommended Posts

Ivan22

olá

criei uma paginação básica para o meu site  mas estou a utilizar duas querys diferentes...

1º eu conto o numero de conteudos existentes na minha b.d

2º limito pelo LIMIT do sql, para mostrar no site

genero:

  function ($pagina_actual){

    $sql['conteudos']=mysql_query("SELECT filmes.* FROM filmes LIMIT  ".$pagina_actual. ", 3 ");

           

    //mostrar 3 filmes por pagina

    $sql['numero_conteudos']=mysql_query("SELECT filmes.* FROM filmes);

  //da me o numero total de conteudo que tenho na bd

    return $sql;

}

É possível juntar as duas querys?

em que por exemplo, tinha um campo ALIAS que guardava me o valor total dos conteudos.

Share this post


Link to post
Share on other sites
mjamado

Tens a certeza que isso está a funcionar correctamente?

É que logo na primeira query tens um erro, devia ser "SELECT * FROM filmes LIMIT " . (($pagina_actual - 1) * 3) . ", 3". Depois, tens a noção que o mysql_query só te devolve o resource e não os dados, certo?

Finalmente, não, não tens como fugir às duas queries; no entanto, a segunda será muito (mesmo muito) mais rápida se fizeres assim: "SELECT COUNT(*) FROM filmes". Isto devolve um número ao invés de um array.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
helt

podes também mandar uma query string pela url, que te diga o nº total de registos que tens. Aí só fazias o COUNT quando não houvesse query string...


––––•(-• [ ђєlt ] •-)•––––

Share this post


Link to post
Share on other sites
Ivan22

sim funciona

esqueci me de colocar é o nome da função, porque isto nao é copy paste do meu codigo original

é apenas um exemplo mais simples

Não apresentei o restante codigo php

mas o que eu faço em relação a saber numero total de conteudos é

$num_conteudo=funcao($pagina_actual);

$num_conteudo=mysql_num_rows($num_conteudo['numero_conteudos']);

em relação ao $pagina_actual eu inicio á zero

depois por paginação, somo +1

obrigado pela dica, o segundo exemplo ; )

ha alguma maneira mais simples, de criar uma paginação

sem recorrer a muitas querys ?

Share this post


Link to post
Share on other sites
mjamado
podes também mandar uma query string pela url, que te diga o nº total de registos que tens. Aí só fazias o COUNT quando não houvesse query string...
óptima sugestão essa por get

Sério, achas?  :nono1:

Pá, essa solução é horrível por todos os motivos e mais alguns... Imagina que estás a inserir (ou a remover) registos no back-office do site e estão utilizadores a ver isto, como é? O count da query string está inválido!

Alguém faz o bookmark duma página quando ainda só tinhas duas... Volta lá passado, sei lá, um mês, via bookmark, e pensa assim "este gajo nunca mais actualizou o site, continua com as mesmas duas páginas". Pior ainda, ele fez o bookmark da segunda, tu apagaste registos e agora tens apenas uma página; quando ele voltar vai ficar a olhar para uma página vazia. Very nice.

O COUNT(*) é ultra rápido, não é sacando fora essa query que vais resolver potenciais problemas de servidor e de MySQL - se existe algum problema, podes ter a certeza que não é daí.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
helt

ya, bom ponto de vista...

Talvez seja mesmo melhor ficares-te pelo COUNT


––––•(-• [ ђєlt ] •-)•––––

Share this post


Link to post
Share on other sites
mjamado
Que tal usares um ORM que te faça isso tudo?

Hey, Ivan22, tenho uma ideia ainda mais fixe: primeiro, ATQJF e depois CIFP.

Não pareço tão cool a citar acrónimos sem explicar o que são?

ATQJ: Apagas Tudo o Que Já Fizeste

CIFP: Começas do Início a Fazer o Pino

ORM: Object Relational Mapping (basicamente, é enjorcares um sistema em que os registos da BD estão mapeados a objectos de classe PHP - a Zend Framework, por exemplo, tem coisas para isso)


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.