Clique abaixo para nos ajudar
Login

Esqueci minha senha

Estamos no Facebook
Buscar
 
 

Resultados por:
 


Rechercher Busca avançada

Quem está conectado
13 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 13 Visitantes :: 1 Motor de busca

Nenhum

[ Ver toda a lista ]


O recorde de usuários online foi de 468 em 1/3/2012, 10:43
Últimos assuntos
» Ajuda a direcionar
Hoje à(s) 01:17 por miiiih

» Alterar uma palavra num arquivo de texto
5/12/2016, 12:02 por Teseu

» Buscar endereço por CEP
3/12/2016, 19:59 por pedrossian

» USAR WEBSERVICE NO VFP9
2/12/2016, 09:50 por AJC

» BANIMENTO DE USUARIO
17/11/2016, 08:31 por FAF

» Impressora Ticket
15/11/2016, 09:20 por clima238

» Gráfico
9/11/2016, 10:43 por hidroluz

» TRANSPOR TABELA
9/11/2016, 10:34 por hidroluz

» MUDANÇA DO .DBF PARA POTSGREE
9/11/2016, 09:12 por AJC

» Website com videoaulas sobre linguagens de programação
8/11/2016, 09:56 por JLDR

» Parceria para desenvolvimento de template em Wordpress
7/11/2016, 19:15 por mindix

» Data fica invertida na planilha que é gerada via programa.
27/10/2016, 11:00 por Linghston

» Maximizar report direto do menu
21/10/2016, 20:48 por Rosangela Pires

» Fechar form com tempo
21/10/2016, 10:15 por Rosangela Pires

» URGENTE: Ajuda com impressora ELGIN-L42
14/10/2016, 09:53 por megasoft

» Opções para gerar NF-e
10/10/2016, 09:07 por mavsinfo

» Google Maps
8/10/2016, 15:08 por Rosangela Pires

» Mysql
5/10/2016, 11:22 por Marcos Guedes

» Acessando Banco em MYSQL de um projeto WORDPRESS
3/10/2016, 10:58 por Marcos Guedes

» OPTION SELECT MOSTRAR CAMPOS QUASE PRONTO
26/9/2016, 21:09 por BobKuspe

Alterar uma palavra num arquivo de texto

5/12/2016, 12:02 por Teseu

Olá prezados colegas de programação!

Este é eu primeiro post no fórum e gostaria de poder …

Comentários: 0

Buscar endereço por CEP

3/12/2016, 19:59 por pedrossian

Caros amigos, meu código para buscar endereço pelo CEP não funciona mais.
Alguém pode me …

Comentários: 0

USAR WEBSERVICE NO VFP9

2/12/2016, 09:50 por AJC

Pessoal, preciso de um material ou livro que me traga instruções como
usar a consumação de …

Comentários: 0

BANIMENTO DE USUARIO

13/11/2016, 16:21 por FAF

A usuária ROSANGELA PIRES ao tentar acessar o Forum obtem sempre a mensagem de BANIMENTO.
A mesma …

Comentários: 3

Impressora Ticket

15/11/2016, 09:20 por clima238

Bom dia,
Por favor alguém me explique porque o código abaixo imprime no ecrã em vez do printer: …

Comentários: 0

Estatísticas
Temos 6963 usuários registrados
O último usuário registrado atende pelo nome de miiiih

Os nossos membros postaram um total de 17119 mensagens em 2577 assuntos

Select aleatorio em uma tabela

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Resolvido Select aleatorio em uma tabela

Mensagem por jmuryci em 15/3/2011, 21:20

Exemplo: suponha uma tabela com 3.000 registros e se deseja fazer um select que traga 300 ou 400 registros desta tabela mas de forma aleatorios e nao em seguencia.
Combinando rand() e append eu ja fiz e funciona muito bem, mas em tabelas grandes, fica muito lento a resposta, dai a necessidade de fazer com select.
quem poderia me ajudar?
Abraços

jmuryci
Começando a Participar
Começando a Participar


Voltar ao Topo Ir em baixo

Resolvido Re: Select aleatorio em uma tabela

Mensagem por Marcos Guedes em 16/3/2011, 08:10

Como você está fazendo?

_________________
Marcos Guedes - Programador e desenvolvedor Web.


Visite o nosso portal:
[Você precisa estar registrado e conectado para ver este link.]

Marcos Guedes
Webmaster
Webmaster


Voltar ao Topo Ir em baixo

Resolvido Poderia postar um exemplo do seu codigo

Mensagem por alceu11 em 16/3/2011, 08:33

Poderia postar um exemplo do seu codigo tipo codigo abaixo.
um exemplo de codigo rapido e outro lento no mesmo codigo
***
O meu codigo
Código:
  Close Databases
Set Safety Off
Create Table teste1( codigo c(10) , descricao c(40), preco N(10,2))
wcod  =1
wdesc ='Produto '
valor =1
Select teste1  && Gerando 1 arquivo com 15000 registros
For i = 1 To 15000
  Insert Into teste1 (codigo,descricao,preco) Values ( Alltrim(Str(wcod,6)), wdesc+Str(wcod), valor)
  wcod=wcod+1
  valor=valor+1
Next
Use In teste1  && fechei o arquivo
****************************
Create Table propdv( codpro c(10) , despro c(40), prepro N(10,2))

** Inserindo 15 mil registro de uma vez, so no arq. Propdv
Insert into propdv (codpro, despro, prepro) select codigo, descricao, preco FROM teste1
 BROWSE normal
 
USE IN teste1
 ***************
 
 
 **Fazendo agora de outra forma com o comando scan se o registro for maior ke  14500
Create Table propdv( codpro c(10) , despro c(40), prepro N(10,2))

Sele 1
Use teste1
Go Top
If Not Eof()
Scan
      Store codigo To cod
      Store descricao To des
      Store preco To pre
      IF RECNO() >=14500
      Insert Into propdv (codpro,despro,prepro) Values (cod,des,pre)
      endif
ENDSCAN

Else
  Wait Window 'nao tem registros para esta operacao' Timeout 1
Endif

Select propdv
BROWSE normal
USE IN propdv
CLOSE DATABASES all
**A função RAND é um gerador de número pseudo-aleatório


alceu11
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido Re: Select aleatorio em uma tabela

Mensagem por jmuryci em 16/3/2011, 09:46

Bom dia Marcos e Alceu, obrigado pelo interesse.
Alceu , no exemplo que voce postou, nao carrega a tabela com registros aleatorios e sim uma seguencia de 500 registros, no caso do seu exemplo de 14501 a 15000 e voce usou o scan, eu quero ver se tem jeito de fazer com select.
segue abaixo como eu fiz e funciona muito bem mas combinando rand() e append e como fica lento para tabelas lentas pelo apontamento do registro e depois o append.
Dai eu estou pensando que com select ficaria muito mais rapido.
Como fiz:
Código:
SELECT produto_id, descricao, preco_cmp_un as pre_custo FROM produto ;
    WHERE descricao>=letra1 AND descricao<=letra2 ORDER BY descricao INTO CURSOR myletra1
   
  COUNT to zx 
 
  SELECT 50
  USE letra
  ZAP
 
  STORE 1 TO n
  SELECT myletra1
 
  SCAN FOR n<=400
  STORE INT(zx*RAND()+1) TO z1
  SELECT 50
  APPEND FROM myletra1 FOR RECNO()=z1
  n=n+1
  LOOP
  ENDSCAN
 
SELECT 50
 SET ORDER TO DESCRICAO  && DESCRICAO
  BROWSE

jmuryci
Começando a Participar
Começando a Participar


Voltar ao Topo Ir em baixo

Resolvido Re: Select aleatorio em uma tabela

Mensagem por alceu11 em 16/3/2011, 10:02

Sem as tabelas fica dificil fazer um simulacao,
A outra duvida e que faz o seu rand() o que realmente esta fazendo com ele o Rand()?
****************************************
A função RAND é um gerador de número pseudo-aleatório

**********************
Se puder simular os tabelas assim como meu codigo, Crie as tabelas como crio no codigo
insira dados , so para testes.
E ai sim, chegaremos logo a um resultado.
Se nao vou ficar no "Achismo" ; e ai o processo sera lento.

ps: qto ao meu codigo ele traz dois resultados o primeiro pega todos os registros,
e no segundo do registro 14500 para frente isto e so uma ideia do ke pode se fazer de filtros. poderia filtar descricao , precos <=2,00 assim por diante.

Aguardo sua resposta.

alceu11
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido Re: Select aleatorio em uma tabela

Mensagem por jmuryci em 16/3/2011, 10:58

Abaixo um exemplo pratico feito com rand() e append ou insert que funciona perfeitamente, so que fica lento em tabelas grandes dai eu estar tentando com select mas nao consegui.

Exemplo:

Código:
SET SAFETY OFF
CREATE TABLE prod (produto n(2))    && cria tabela prod
CREATE TABLE teste (produto n(2))  && cria tabela teste
CLOSE TABLES ALL

USE teste     
FOR i= 1 TO 10        && insere 10 registros na tabela teste
INSERT INTO teste (produto) values(i)
NEXT

BROWSE

COUNT TO zx      && armazena o numero de registro na variavel zx

SELECT 10          && abre e limpa tabela prod
USE prod EXCLUSIVE
ZAP

STORE 1 TO n
SELECT teste

SCAN FOR n<=4                && scan na tabela teste
** o rand abaixo cria um numero aleatorio entre 1 e o numero de registro (ZX)da tabela
** é somado a 1 para nao criar numero zero porque daria erro de registro.
**  multiplicado por ZX que ue impede ser gerado numero maior que a tabela contenha   
STORE INT(zx*RAND()+1) TO z1 
SELECT 10                    && seleciona a tabela destino       
APPEND FROM teste FOR RECNO()=z1  && append na tabela para o registro aleatorio
n=n+1
LOOP
ENDSCAN

SELECT 10
BROWSE
** cada vez que voce rodar esta rotina, ira carregar 4 registros aleatorios na tabela prod
** isto que pretendo fazer usando select ao inves de append pois em tabelas muito grande, 30.000
** registro por exemplo, fica muito lento.
** se vc rodar 10 vezes, com certeza vira 10 combinacoes diferentes de 4 registros
** isto é o que é buscar registros aleatorios que eu preciso
** obviamente que no exemplo acima e possivel que venha algum registro repetido
** devido ao rand() sortear um mesmo numero mas depois e so fazer um filtro para
** eliminar os registro repetidos

jmuryci
Começando a Participar
Começando a Participar


Voltar ao Topo Ir em baixo

Resolvido Re: Select aleatorio em uma tabela

Mensagem por _batmanvfp_ em 16/3/2011, 11:26

Código:
lnNumber = 5
 Create Cursor Tally (f1 i)
 For ix =1 To m.lnNumber
    Insert Into Tally Values (m.ix)
 Endfor
 Rand(-1)
 Select f1 ;
 From (Select Rand(),f1 From Tally Order By 1) tmp

Da pra partir dessa ideia

_batmanvfp_
Participa Bastante
Participa Bastante


Voltar ao Topo Ir em baixo

Resolvido Re: Select aleatorio em uma tabela

Mensagem por alceu11 em 16/3/2011, 12:04

Apesar de toda a explicacao,,,,,,,,,,ainda nao entendi, o que rand() tem ke haver, so para pegar 4 registro aleatorios, com o codigo,, o que isto levara em um tabela de 30 mil registro pegar 4 aleatorios..?
,mas com 30 000 registro aqui foi rapido. 3 seg.

Código:

CLOSE TABLES all
CLOSE DATABASES all
SET SAFETY OFF
CREATE TABLE prod (produto n(5)) && cria tabela prod
USE IN prod
CREATE TABLE teste (produto n(5)) && cria tabela teste
SELECT teste
FOR i= 1 TO 15000 && insere 15000 registros na tabela teste
INSERT INTO teste (produto) values(i)
NEXT
 
COUNT TO zx && armazena o numero de registro na variavel zx 15000
 
SELECT 10 && abre e limpa tabela prod
USE prod EXCLUSIVE
ZAP

STORE 1 TO n
SELECT teste

SCAN  FOR n<=4 && scan na tabela teste
** o rand abaixo cria um numero aleatorio entre 1 e o numero de registro (ZX)da tabela
** é somado a 1 para nao criar numero zero porque daria erro de registro.
** multiplicado por ZX que ue impede ser gerado numero maior que a tabela contenha
STORE INT(zx*RAND()+1) TO z1

INSERT INTO prod values(z1)

n=n+1
LOOP
ENDSCAN
 
SELECT 10
IF RECCOUNT()>0
BROWSE
ELSE
WAIT WINDOW 'nao encontrei os registros ' TIMEOUT 1
endif
** cada vez que voce rodar esta rotina, ira carregar 4 registros aleatorios na tabela prod
** isto que pretendo fazer usando select ao inves de append pois em tabelas muito grande, 30.000
** registro por exemplo, fica muito lento.
** se vc rodar 10 vezes, com certeza vira 10 combinacoes diferentes de 4 registros
** isto é o que é buscar registros aleatorios que eu preciso
** obviamente que no exemplo acima e possivel que venha algum registro repetido
** devido ao rand() sortear um mesmo numero mas depois e so fazer um filtro para
** eliminar os registro repetidos

O mais facil era select direto de uma tabela com a outra com a condicao where
como no meu primeiro exemplo 1 linha somente, mais ainda nao entendi, direito a coisa.
A cada execucao do codigo encontro um resultado diferente do 4 registros, que ele filtrou, 20055,9037,22061 etc,
** Inserindo 15 mil registro de uma vez, so no arq. Propdv
Insert into propdv (codpro, despro, prepro) select codigo, descricao, preco FROM teste1 where suacondicao
BROWSE normal

alceu11
Usuário 5 Estrelas
Usuário 5 Estrelas


Voltar ao Topo Ir em baixo

Resolvido Re: Select aleatorio em uma tabela

Mensagem por jmuryci em 16/3/2011, 14:25

Ola Alceu, acho que voce ainda nao entendeu a logica da rotina, dai a dificuldade sua e talvez a minha explicacao nao esteja sendo bem clara.
Na mudança que voce fez no codigo que postei, vc nao carragou os registro da tabela original e sim os numeros gerados pelo rand(), e nao é isto que deve ser feito.
Quanto a necessidade do Rand() e exatamente gerar um numero aleatorio e para cada numero deste gerado, ir no record correspondente na tabela origem e ai sim, carregar este registro na tabela destino dai, eu estou usando o append. que e mais lento que o select.
A sua rotina foi rapida como voce disse extamente porque vc nao carregou os registros da tabela origem e sim o numero gerado pelo rand(), neste caso, e super rapido mesmo.
Atente para o seu insert que vc vera que ele carrega o valor do Rand().
Usando o insert como vc fez, teria que apontar o registro gerado pelo rand(), dar um store em cada campo e depois carregar os values do insert com os valores das variaveis armazenado no store.
Ou seja, vc nao carregou nenhum registro.
Quanto ao numero de registro que vc disse nao entender porque carregar 4 registro de uma tabela de 15.000, eu usei isto so como exemplo, na verdade vc carrega quantos registros aleatorios vc queira.
Quanto ao uso pratico disto, veja:
Imagine um cadastro de produtos (30.000 produtos) e seus respectivos estoques.
Quero gerar uma lista com digamos 600 produtos aleatorios para que os empregados contem diariamente o estoque. O cliente quer que os produtos sejam "sorteados" para a contagem do estoque. Esta e a real necessidade de se gerar uma tabela aleatoria para um cliente.
Caracas....enquanto estava escrevendo este post, me veio uma ideia que acho que vai dar certo....vou fazer u7m teste aqui e se der certo o que pensei e posto depois.

Alceu, nao sei se consegui me fazer entender agora....
espero que sim.
Um abraço,

jmuryci
Começando a Participar
Começando a Participar


Voltar ao Topo Ir em baixo

Resolvido Re: Select aleatorio em uma tabela

Mensagem por jmuryci em 16/3/2011, 15:42

Blz pessoal, quero agradecer a atencao de todos e a ajuda.
Eu consegui resolver o problema com um recurso tecnico de alto nivel, ou seja uma "gambiarra", mas funcionou super mega rapido.

A solucao e simples, vejamos:

criei um campo indice na tabela origem, ordenei a tabela pelo campo descricao, gerei um numero aleatorio com rand() e inseri no campo indice.
Ao ordenar a tabela pelo campo indice, crio uma ordem aleatoria na tabela onde depois disto faço um select top xnumero de registro que quero buscar na tabela origem, gerando assim uma tabela de destino completamente aleatoria a cada vez que rodo a rotina.
Pelo menos funcionou bem.
Entao, peço aos moderadores que possam dar por resolvido o problema embora caso alguem tenha alguma solucao mais eficiente que esta gambiarra, estou aberto a sujestoes.
No mais um grande abraço e muito obrigado a todos.
abaixo o codigo que gerai caso interesse a alguem.
Código:
SELECT produto_id, descricao, preco_cmp_un as pre_custo, qt_fr as indice FROM produto ;
    WHERE descricao>=letra1 AND descricao<=letra2 ORDER BY descricao INTO CURSOR myletra1 READWRITE  && cursor criado da tabela origem adicionando campo indice
   
    BROWSE
    COUNT to zx      && para nao dar erro de estouro de registros
    SCAN 
    STORE INT(zx*RAND()+1) TO z1  && gera numeros aleatorios para indice
    replace indice WITH z1
    LOOP
    ENDSCAN
    BROWSE
    SELECT TOP 400 * FROM myletra1 ORDER BY indice && seleciona os 400 registros ja aleatorios

jmuryci
Começando a Participar
Começando a Participar


Voltar ao Topo Ir em baixo

Resolvido Re: Select aleatorio em uma tabela

Mensagem por jmuryci em 16/3/2011, 16:30

Agora sim, ajuntando uma com a outra saiu conforme eu queria.
Os administradores podem dar como resolvido. Incrivel como a solucao esta sempre na cara da gente e nao enxergamos ne......rsrsrs
Obrigado mais uma vez....

Abaixo a solucao pra quem algum dia precisar de algo parecido:

Código:
SELECT produto_id, descricao, preco_cmp_un as pre_custo FROM produto ;
    WHERE descricao>=letra1 AND descricao<=letra2 ORDER BY descricao INTO CURSOR myletra1 READWRITE
       
  COUNT to zx
   
    SELECT  TOP 20 produto_id, descricao, pre_custo, INT(zx*RAND()+1) as indice From myletra1 ;
    ORder by indice

Funcionou super bem e com selet fica mega rapidao.

jmuryci
Começando a Participar
Começando a Participar


Voltar ao Topo Ir em baixo

Resolvido Re: Select aleatorio em uma tabela

Mensagem por Conteúdo patrocinado Hoje à(s) 19:04


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum