Jump to content


Photo

Escolha Aleatória Entre Determinados Registros


  • Faça o login para participar
26 replies to this topic

#1 ESBF

ESBF

    12 Horas

  • Usuários
  • 169 posts
  • Sexo:Não informado

Posted 26/01/2004, 16:50

galera, é o seguinte...
digamos que num tabela eu tenha os seguintes códigos de registros:
7,9,10,11,12,14.
É possível fazer uma seleção randomica apenas entre estes números?

Valeu!!

Edição feita por: ESBF, 03/02/2004, 17:41.


#2 Bart

Bart

    Ativo

  • Usuários
  • 331 posts
  • Sexo:Não informado
  • Localidade:Coromandel
  • Interesses:Chegando pra ser o melhor!

Posted 26/01/2004, 19:30

Olha se isso pode ajudar...

'Criamos a conexão com o banco de dados 
strCon = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\nome_do_banco_de_dados.mdb;" 
Set Conexao = Server.CreateObject("ADODB.Connection") 
Conexao.Open strCon 

'Capturamos na tabela o número total de registros existentes 
ComandoSQL = "SELECT COUNT(*) AS total_registro FROM nome_da_tabela" 
Set bd = Conexao.Execute(ComandoSQL) 
total_registros = bd("total_registro") 
Set bd = Nothing 

'Fazemos um sorteio com o número total de registros encontrados 
randomize() 
registro_sorteado = Int(total_registros *Rnd) + 1 

'Capturamos todos os registros da tabela 
ComandoSQL = "SELECT * FROM nome_da_tabela" 
Set bd = Conexao.Execute(ComandoSQL) 

'Se o registro sorteado não for o primeiro da tabela, 
'movemos o cursor para o registro sorteado 
If registro_sorteado > 1 Then 
bd.Move registro_sorteado 
End If 

'Escrevemos na tela os campos desejados do registro encontrado 
Response.Write bd("nome_do_campo") 

'Fechamos a conexão com o banco de dados 
Conexao.Close 

'Eliminamos as variáveis usadas da memória 
Set registro_sorteado = Nothing 
Set bd = Nothing 
Set Conexao = Nothing 
Set ComandoSQL = Nothing


#3 ESBF

ESBF

    12 Horas

  • Usuários
  • 169 posts
  • Sexo:Não informado

Posted 27/01/2004, 00:18

No exemplo que dei, temos 6 registros, certo 7,9,10,11,12,14?
Então a variável total_registros seria igual a 6.
Quando eu usasse a função pra selecionar um registro aleatório ela iria selecionar um registro entre 1 e 6, correto? Então, como eu faria pra selecionar o registro de código = 12?
Do jeito que vc colocou não dá certo.
Eu tive uma idéia de como fazer isso usando ARRAY, mas é muito gambiarra.

Ninguém sabe um jeito mais inteligente de fazer?

Edição feita por: ESBF, 27/01/2004, 00:18.


#4 K I L L I N G

K I L L I N G

    Batera na veia, ASP no coração

  • Banidos
  • PipPipPipPip
  • 398 posts
  • Sexo:Não informado

Posted 27/01/2004, 00:32

VOCÊ QUER SELECIONAR OS REGISTROS POR EXEMPLO: 1,2,3,5,8,10
OU QUER SELECIONAR ENTRE 1 E 5 POR EXEMPLO?
http://www.fiquecomigo.com
http://www.fiquecomigo.com.br
Encontre o amor da sua vida aqui!

Vinícius Nunes Lage
vinibaterabol@msn.com

#5 ESBF

ESBF

    12 Horas

  • Usuários
  • 169 posts
  • Sexo:Não informado

Posted 27/01/2004, 16:33

Ae, K I L L I N G, blz?
EU não quero fazer uma seleção entre 1 e 5, pois os códigos das tabelas não são de 1 a 5.
Vamos pegar essa sequencia que vc deu como exemplo: 1,2,3,5,8,10.
Eu quero selecionar randomicamente um desses números(1,2,3,5,8,10).
Neste caso, não será de 1 a 10, pois poderia sair o número 9 e ele não se encontra na lista, sacou? Assim como o 4, por exemplo.

Tem como fazer?

Valeu!

#6 Rodrigo

Rodrigo

    oi!

  • Usuários
  • 995 posts
  • Sexo:Não informado
  • Interesses:Diretório de sites - http://www.acheinobrasil.com.br

Posted 27/01/2004, 20:52

tenta algo como isso:

'aki a string de conexão
SQL = "select * from tabela"
rs.open sql,conexao, 1, 3

rs.movelast

ultimo_registro=rs("id")

rs.close

do while x<>1

randomize
numero=rnd*ultimo_registro

sql="select * from tabela where id=" & numero
rs.open sql, conexao, 1, 3

if rs.bof or rs.eof then
   x=0
   rs.close
 else
   x=1
   'aki o codigo
end if

loop

acho q da certo ;)

#7 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 27/01/2004, 23:49

Olá. Acho que dá assim:

SELECT * FROM Tabela WHERE Codigo IN (7,9,10,11,12,14) ORDER BY RAND()

Se o RAND() não funcionar, pode coisa do seu banco de dados, já que em alguns são usadas a variações.

#8 ESBF

ESBF

    12 Horas

  • Usuários
  • 169 posts
  • Sexo:Não informado

Posted 28/01/2004, 08:28

Ae galera!!
Rodrigo, essa sua idéia ficou muito boa (y) . O único problema é que, no meu caso, quando ele não achasse nenhum registro a minha idéia seria mostrar um texto padrão, já que eu esperava conseguir fazer o random apenas com os números desejados. Neste caso, vou ter que repensar isto ou fazer usando SQL.

LeoB, eu tava começando a pesquisar algo como fazer isso usando SQL.
Olha, na minha tabela eu tenho um flag que diz se a notícia é ou não um destaque.
Como ficaria a instrução pra mim trazer apenas um registro, de forma randômica, das notícias que são destaques?

SELECT TOP 1 FROM tblNoticia WHERE noti_Destaque = 1 ORDER BY RAND()

Poderia ser algo assim?
obs: o banco que uso é o access e estou utilizando consultas.
( eu tô sem poder testar pq tô sem máquina no momento)

Valeu galera!

Edição feita por: ESBF, 28/01/2004, 08:30.


#9 Rodrigo

Rodrigo

    oi!

  • Usuários
  • 995 posts
  • Sexo:Não informado
  • Interesses:Diretório de sites - http://www.acheinobrasil.com.br

Posted 28/01/2004, 08:50

nunca tinha visto rand() numa consulta sql... vou dar uma olhada

#10 Rodrigo

Rodrigo

    oi!

  • Usuários
  • 995 posts
  • Sexo:Não informado
  • Interesses:Diretório de sites - http://www.acheinobrasil.com.br

Posted 28/01/2004, 08:54

acabei de achar

seria algo assim:

SELECT TOP 1 FROM tblNoticia WHERE noti_Destaque = 1 ORDER BY RAND(id)


#11 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 28/01/2004, 12:57

Olá. O SQL tem muitas funções que a gente acaba sem conhecer. Só agora que comecei a usar a referência é que estou vendo quantas linhas dá pra economizar com ele. Sendo access, acho que a consulta fica como o Rodrigo falou, o nome do campo vai dentro do RAND.

#12 ESBF

ESBF

    12 Horas

  • Usuários
  • 169 posts
  • Sexo:Não informado

Posted 31/01/2004, 16:17

Ae galera!
Me ajudaram muito. Só tem um pequeno detalhe... no access a função se chama RND() e no SQL RAND().
Neste caso, minha consulta ficou assim:

SELECT TOP 1 * FROM tblNoticia WHERE noti_Destaque = 1 ORDER BY RND(noti_CodNoticia)


Valeu ae pela ajuda!! (y)

Edição feita por: ESBF, 31/01/2004, 16:22.


#13 ESBF

ESBF

    12 Horas

  • Usuários
  • 169 posts
  • Sexo:Não informado

Posted 03/02/2004, 16:09

Rodrigo ou Leo (ou qualquer outro), teste ae esse código SQL, pois quando criei uma consulta no access e executei deu tudo certo, mas quando testei na página num dá certo, isto é, ele num retorna randomicamente.

Olha o código da consulta SQL novamente:

SELECT TOP 1 * FROM tabela ORDER BY RND(id)

Olha meu código ASP:

set rsAux = Server.CreateObject("ADODB.Recordset")
rsAux.CursorLocation = adUseClient
strQ = "Consulta" 'consulta no access
rsAux.Open strQ, conDados, adOpenStatic, adLockOptimistic, adCmdStoredProc

Valeu!

Edição feita por: ESBF, 03/02/2004, 16:11.


#14 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 03/02/2004, 16:54

Pois é ESBF. Tem um outro rapaz que está com o mesmo problema que o seu e eu ainda não consegui resolver. Estranho isso, funciona no Access, mas no ASP nada.

#15 ESBF

ESBF

    12 Horas

  • Usuários
  • 169 posts
  • Sexo:Não informado

Posted 03/02/2004, 17:27

Ae, leo. Blz?
Olha, eu prefiro usar SQL, neste caso, do que ASP, principalmente se tratando de Stored Procedure (consultas no access). Mas, como tava dando esse problema eu consegui resolvê-lo usando ASP mesmo. Ficou da segunte forma:

Eu seleciono todos os registros da tabela e escolho um número aleatório entre 1 e o total de registros existentes. Áí, eu uso o rs.Move RegistroSelecionado, desse jeito num corro o risco de mandar abrir um recordset com um número que possa não existir, como no exemplo do Rodrigo.
Olha o código:
rsAux.Open "SELECT * FROM tabela", conexao, adOpenStatic, adLockOptimistic, adCmdText   	 
randomize()
RegistroSorteado = Int(rsAux.RecordCount * Rnd)
rsAux.Move RegistroSorteado

Mas, se conseguir algo com SQL no access, avisa ae, blz? (y)

Um abraço!!




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq