quarta-feira, 3 de dezembro de 2008

Paginação de Resultados com Seleção Aleatória

Essa dica vai para quem quer fazer uma seleção aleatória e paginar os resultados, essa solução é muito usada para quem quer fazer uma vitrine de produtos...


O problema que o pessoal encontra e que ao usar a função rand(), ela gera resultados aleatórios diferentes a cada execução, portanto ao usar por exemplo;


$pagina = $_GET['$pagina'];

"select * from xxx order by rand(5) limit". $pagina * 10 .",".$pagina * 10 + 10;


A cada página a ordenação será diferente portando os resultados podem se repetir, ou não ser exibidos, deixando inviável a paginação...

Para entender a solução vamos olhar a sintaxe do comando rand():


RAND(), RAND(N)

Retorna um valor de ponto flutuante aleatório na faixa de 0 a 1.0. Se um argumento inteiro N é especificado, ele é usado como uma semente (produzindo uma sequência repetitiva):

Traduzindo: Se você passar algum argumento ele vai gerar uma seqüência sempre igual de números;

Exemplo:

mysql> SELECT i, RAND(3) FROM t;
+------+------------------+
| i    | RAND(3)          |
+------+------------------+
|    1 | 0.90576975597606 | 
|    2 | 0.37307905813035 | 
|    3 | 0.14808605345719 | 
+------+------------------+

Mas isso não nos ajuda muito pois se eu usar por exemplo:


$pagina = $_GET['$pagina'];

"select * from xxx order by rand(5) limit". $pagina * 10 .",".$pagina * 10 + 10;

Vou ter novamente uma seleção estática, pois retornara sempre os mesmos resultados...


Agora vai a nossa solução, gerar aleatoriamente o argumento que vai ser usado na função rand() e armazená-lo e uma variável de sessão...


//INICIANDO A SESSÃO

session_start();

//SETANDO A VARIAVEL argumento_rand COM UM NUMERO ALEATORIO

if(!isset($_SESSION['argumento_rand'])){

$_SESSION['argumento_rand'] = rand(1,100);

}

$pagina = $_GET['$pagina'];

"select * from xxx order by rand("._SESSION['argumento_rand'].") limit". $pagina * 10 .",".$pagina * 10 + 10;

//A CADA EXECUCAO A LISTAGEM SERÁ DIFERENTE,

//MAS ENQUANTO A SESSAO ESTIVER ATIVA ELA SERA A MESMA, PERMITINDO // ASSIM A PAGINACAO DE RESULTADOS

//DESENVOLVIDO POR EMANUEL SCARIOT

//emanuelscariot@gmail.com

?>








quinta-feira, 13 de março de 2008

Boas Vindas

Bom dia a todos, hoje, 13 de Março de 2008, começam efetivamente as atividades do Blog PHPinsiders, lembrando que o Blog estréia no espaço do Blogger, mas em breve, dependendo do interesse e do número de acessos, ele será migrado para um endereço próprio e definitivo.

Lembro aos visitantes que começo sozinho este trabalho, mas no entanto, fico no aguardo ansioso do contato de outros que perventura tenham interesse em colaborar com esta empreitada, afinal não busco com este espaço reconhecimento pessoal, mas sim possuir um local onde ou possa expressar, disponibilizar e compartilhar o conhecimento que busco e construo diariamente no trabalho, pretendendo com isso poupar o tempo, daqueles, profissionais ou estudantes, que encontrem aqui resposta para as suas duvidas.

Não sou Blogeiro Profissional, mas pretendo me dedicar a este espaço, por isso me proponho a ler todos os comentários, bem como a responder, na medida do possível, todas as dúvidas que forem levantadas em meus tópicos.

Não sou o dono da verdade, por isso peço a colaboração dos leitores que notarem algum erro nos posts, por favor me informem pois também estou aqui para aprender.

Para quem gostar, peço que assine o RSS do Blog e se mantenha sempre atualizado.

Finalizando, deixo o meu muito obrigado pela visita de todos, pois somente ela recompensa o esforço e tempo gastos nessa empreitada.