Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Videres

Consulta randômica sem repetição de registro

Recommended Posts

Bom dia pessoas,

Estou tentando fazer uma consulta randômica em postgres que até ai tudo bem, a bronca esta na repetição dos registros, não estou conseguindo

 

Estou pesquisando a um tempo e n consegui uma informação bacana... estou em duvida s resolvo isso em php ou no próprio sql s alguém puder me dar uma dica fico agradecido.

 

 

Segue a consulta:

$sql = "SELECT * FROM teste ORDER BY random() LIMIT 10 OFFSET 0 ";

$resultado = pg_query($sql) or die ("Problema na Consulta");
$linhas = pg_num_rows($resultado);



while ($linha = pg_fetch_array($resultado)){}

vlws

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta utilizar a função DISTINCT

 

:seta: http://www.w3resource.com/PostgreSQL/distinct.php

 






$sql = "SELECT DISTINCT colunadesejada FROM teste ORDER BY random() LIMIT 10 OFFSET 0 ";

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Basta utilizar a função DISTINCT

 

:seta: http://www.w3resource.com/PostgreSQL/distinct.php

 






$sql = "SELECT DISTINCT colunadesejada FROM teste ORDER BY random() LIMIT 10 OFFSET 0 ";

 

 

Vlws Alaerte... tentei fazer dessa maneira mas n funfou... esta dando falha na consulta e infelizmente n tenho como visualizar a descrição do erro pq estou trabalhando em um servidor institucional que n permite visualizar.

 

+ Estou pesquisando sobre... ess deve ser o caminho. \o_

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso, veja que existem vários meios com o distinct, tipo:

 

SELECT campos DISTINCT ON...

E por aí vai...

 

 

Estava dando uma olhada..

 

Até tentei fazer assim:

$sql = "SELECT DISTINCT ON (id) FROM pergunta ORDER BY random() LIMIT 10 OFFSET 0 ";


$sql = "SELECT DISTINCT ON (coluna) FROM pergunta ORDER BY random() LIMIT 10 OFFSET 0 ";

N tive muito sucesso.. ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

com certeza ID repetido você não vai ter, tem que colocar o nome da coluna a qual você recebe os dados repetidos...

Pow man, já tentei inserir o DISTINCT de tudo q é jeito e n consegui fazer funfar...

Vou tenta pular pra parte logica.. ver s consigo algo... qualquer coisa posto aqui. vlws pela força

Compartilhar este post


Link para o post
Compartilhar em outros sites

Retire o OFFSET 0 da consulta e tente.

 

Pronto Alaerte, depois de mutias tentativas, descobri que a bronca esta na funcao random(), substituindo o sql abaixo:

 

$sql = "SELECT DISTINCT * FROM pergunta p ORDER BY random() LIMIT 5 OFFSET 0";

 

por:

 

$sql = "SELECT DISTINCT * FROM pergunta ORDER BY id LIMIT 5 OFFSET 0 ";

Ele funciona, porém perco os resultados randomicos....

A bronca agora é fazer a consulta randômica. Ta chegando srsrsr

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem porque dar erro, a função random() está correta, retire o offset 0 e teste com o random e o distinct

Fiz isso tambbém.. e n funfou T_T

Só funfou quando retirei o RANDOM();

 

O tenso é que n tenho como visualizar o erro.

 

Tentei dessa forma tb:

 

$sql = "SELECT DISTINCT t.* FROM (SELECT * FROM teste ORDER BY random())as t LIMIT 5 OFFSET 0 ";

masss.. n tive mto exito.. ate exibiu as informacoes aleatorias, mas tipo quando peço para dar novamente um random, ele so altera a posicao de 2 registros, por falta de conhecimento ainda n sei o pq... mas ta chegando... ^^

 

VLws

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLVIDO!

Seguindo a dica de Alaert Gabriel, consegui resolver inserindo o DISTINCT da seguinte forma:

 

$sql = "SELECT DISTINCT random(),* FROM teste LIMIT 5 OFFSET 0";

 

N sei s é a forma mais adequada.. mas funcionou.

Dessa maneira consigo inserir os valores aleatórios da minha tabela dentro de um array, sem repetição.

 

Vlws pela ajuda Alaerte. abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.