Videres 3 Denunciar post Postado Março 22, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Março 22, 2013 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
Videres 3 Denunciar post Postado Março 22, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Março 22, 2013 Isso, veja que existem vários meios com o distinct, tipo: SELECT campos DISTINCT ON... E por aí vai... Compartilhar este post Link para o post Compartilhar em outros sites
Videres 3 Denunciar post Postado Março 22, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Março 22, 2013 com certeza ID repetido você não vai ter, tem que colocar o nome da coluna a qual você recebe os dados repetidos... Compartilhar este post Link para o post Compartilhar em outros sites
Videres 3 Denunciar post Postado Março 22, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Março 22, 2013 Retire o OFFSET 0 da consulta e tente. Compartilhar este post Link para o post Compartilhar em outros sites
Videres 3 Denunciar post Postado Março 22, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Março 22, 2013 Não tem porque dar erro, a função random() está correta, retire o offset 0 e teste com o random e o distinct Compartilhar este post Link para o post Compartilhar em outros sites
Videres 3 Denunciar post Postado Março 22, 2013 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
Videres 3 Denunciar post Postado Março 25, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Março 25, 2013 Beleza, se funcionou corretamente, então é a forma correta, caso contrário iria gerar erros, etc. :) Compartilhar este post Link para o post Compartilhar em outros sites