Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Gonçalo_ssb

registos aleatórios

Recommended Posts

Gonçalo_ssb

Alguém sabe uma query que me seleccione 4 registos alteatórios de uma base de dados SQL?

Share this post


Link to post
Share on other sites
pmg

Eu já fiz isso no Microsoft SQL Server, mas não me lembro como foi :|

De qualquer maneira, amanhã, posso ver o código onde isso tá metido (no trabalho).

Se bem me lembro, a função rand() do exemplo abaixo não funciona no MSSQL.

Aqui em casa, experimentei agora mesmo com o Mysql e o exemplo abaixo funciona.

Para outras base de dados (Oracle, Postgresql, sqlite, ...) não sei.

Nem sei se o Standard SQL tem alguma coisa para isso (*).

SELECT col1, col2, ..., colN
FROM tabela
WHERE 1=1
ORDER BY rand()
LIMIT 4

(*) Alguém sabe onde é que eu posso arranjar, sem pagar!, o Standard do SQL (SQL92 ou outro)?


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
pmg

No trabalho tenho um gerador de password aleatórios em MSSQL.

Tenho uma tabela "words" com milhentas palavras, e tenho um query para ir buscar uma palavra aleatória.

Esse query é

select word
from word
where id = convert(int, rand()*( select count(*) from word )) + 1

Edit: Atenção que a tabela word tem o campo id a começar em 1 e sem "buracos" até ao registo com o id maior.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Bezierk

No trabalho tenho um gerador de password aleatórios em MSSQL.

Tenho uma tabela "words" com milhentas palavras, e tenho um query para ir buscar uma palavra aleatória.

Esse query é

select word
from word
where id = convert(int, rand()*( select count(*) from word )) + 1

Edit: Atenção que a tabela word tem o campo id a começar em 1 e sem "buracos" até ao registo com o id maior.

não seria melhor (mais seguro) teres uma lista de caracteres e fazeres um get a um x numero de caracteres? alias, isso nao seria possivel fazer mesmo alguma coisa que gerasse isso sem lista nenhuma?

Share this post


Link to post
Share on other sites
pmg

Pois, mas eu não quero uma password do tipo "rie6toTh".

Usando palavras duma lista e um número aleatório, obtenho passwords do tipo "chaga81pronto", que tem 'segurança' suficiente até o dono da password a mudar ...

A razão de ser da password simples, é que a transmissão da password, do servidor para o utilizador final, passa por seres humanos. Os utilizadores finaies da aplicação onde apliquei isto podem não ter endereço de mail. A password pode ser transmitida por telefone, por memo, por sinais de fumo, ... (e claro, por mail também (às vezes automático)).


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Ricardo RMX

Ou entendi mal ou o foco da questão inicial mudou de registros aleatórios para password aleatória.

Se a questão for registros aleatórios e se estes registros tiverem um campo numérico inteiro, um pequeno código dentro de um loop poderá criar números aleatórios e verificar se algum coincide com uma linha do BD. Após a 4ª coincidência, pára.

Quanto à segurança da password lembro que é fundamental criptografar.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.