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

Sign in to follow this  
bioshock

Rand()

Recommended Posts

bioshock

Boas!

É possível fazer um Rand() sem que ele repita?

Obrigado!

EDIT: No SELECT

Share this post


Link to post
Share on other sites
KiNgPiTo

A melhor maneira penso que será evitares no Select (com select deduzo que seja numa chamada sql)...

Em php consegues controlar melhor o processo adicionando os números a um array e verificares se estão lá, se estiverem pedes outro até que não esteja e siga...

Algo tipo:

$ignorar = array();
$valor = rand(0, 10);
while( in_array($valor, $ignorar) )
    $valor = rand(0, 10);
$ignorar[] = $valor;

Share this post


Link to post
Share on other sites
bioshock

A melhor maneira penso que será evitares no Select (com select deduzo que seja numa chamada sql)...

Em php consegues controlar melhor o processo adicionando os números a um array e verificares se estão lá, se estiverem pedes outro até que não esteja e siga...

Algo tipo:

$ignorar = array();
$valor = rand(0, 10);
while( in_array($valor, $ignorar) )
    $valor = rand(0, 10);
$ignorar[] = $valor;

No SELECT estou a fazer algo como isto:

$query  = "SELECT * FROM imagens WHERE visibilidade=1 ORDER BY Rand() LIMIT 1"

Share this post


Link to post
Share on other sites
KiNgPiTo

Era o que queria dizer, quando mandas uma chamada por sql a uma BD ela foi... penso que depois de ir não tens como a controlar e saber se um rand já saiu ou não (provavelmente até tens com Stored procedures ou lá como se chamam, ou estou a dizer asneiras, não percebo nada de sql (offtopic: talvez dê nisso agora estes dias :D ))

Em php tens mais possibilidades de controlar, em vez de chamares o Rand em no SQL, chamas em php, verificas se está no array o que quer dizer que já saiu ou não e depois chamas um sql onde pesquisa um id com esse valor e retorna a row.

(Não sei se interessa, mas: http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table já me tinham falado e agora encontrei isto)

Share this post


Link to post
Share on other sites
bioshock

Era o que queria dizer, quando mandas uma chamada por sql a uma BD ela foi... penso que depois de ir não tens como a controlar e saber se um rand já saiu ou não (provavelmente até tens com Stored procedures ou lá como se chamam, ou estou a dizer asneiras, não percebo nada de sql (offtopic: talvez dê nisso agora estes dias :D ))

Em php tens mais possibilidades de controlar, em vez de chamares o Rand em no SQL, chamas em php, verificas se está no array o que quer dizer que já saiu ou não e depois chamas um sql onde pesquisa um id com esse valor e retorna a row.

(Não sei se interessa, mas: http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table já me tinham falado e agora encontrei isto)

Bem eu li o site, mas vi que não se aplicava a mim, pois vai ser algo simples portanto posso usar o Rand().

Da forma como tu disseste, pelos arrays, eu até percebi o código, não percebi é onde tenho que o aplicar e as alterações que devo fazer para ele fazer-me o rand da imagem. Obrigado!

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
Sign in to follow this  

×

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.