Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Dário Cardoso

RAND() sem repetir

Recommended Posts

Ola galera!

 

Bom é o seguinte: estou desenvolvendo um SISTEMA DE AVALIAÇÃO ON-LINE e me deparei com um probleminha q tá dando o q fala <_<

O sitema funciona assim, o user inicia e de kra já mostra a 1ª pergunta e as opções para resposta, daí ele escolhe uma das opções e clica em PROXIMA para ir para a 2ª pergunta e assim por diante 3ª, 4ª, 5ª, mas é aí q tá pegando, veja o codigo:

$sql = "SELECT DISTINCT * FROM $get_tabela_db WHERE loja='$post_loja' AND linha='$post_linha' OR loja='TODAS' AND linha='$post_linha' OR loja='$post_loja' AND linha='TODAS' OR loja='TODAS' AND linha='TODAS' ORDER BY RAND() LIMIT 1";

$query = mysql_query($sql)or die(mysql_error());

 

Esse codigo ae, como vcs podem ver, seleciona os dados aleatoriamente usando RAND, e tras apenas um registro (LIMIT 1), que é a pergunta para o usuario responder, O PROBLEMA: é que o RAND as vezes REPETI algum registro, ou seja, algumas perguntas, daí num dá pq o usuario já respondeu aquela tal pergunta...

...COMO FAÇO PARA QUE O RAND() NÃO REPITA????

POR FAVOR, HELP :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mim responde uma coisa, para o user responder essa avaliação ele precisa se logar, se sim tenho uma solução, aguardo......

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode guardar o ID de cada pergunta que o user está, em sessão.

E depois quando você for fazer o select, você coloca para que o ID, seja diferente do da sessão. Dae ele nunca vai repetir.

 

WHERE ID <> ID_SESSAO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não loga não Adson, pq eu estou em uma INTRANET e é para os funcionarios da empresa responderem!

Só o pessoal que vai administrar o sistema, ou seja, cadastrar perguntas, respostar, ver as avaliações, percentuais etc.

 

Dee, eu já pensei nisso, mas o SELECT vai crescer muito dependendo da quantidade de questoes que tiver no banco!

Então estou procurando, primeiramente, se tem como eu fazer isso de maneira mais limpa, senão tiver como, vou ter que fazer dessa forma q tu me falaste. ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a pessoa não precisa de login pra responder, pode resolver como o Dee falou, guardando numa sessão. Mas eu colocaria os IDs na sessão em forma de array. Na hora de consultar a próxima pergunta, faria assim:

 

"SELECT DISTINCT * FROM $get_tabela_db WHERE (loja='$post_loja' AND linha='$post_linha' OR loja='TODAS' AND linha='$post_linha' OR loja='$post_loja' AND linha='TODAS' OR loja='TODAS' AND linha='TODAS') AND id_pergunta NOT IN (" . implode(',', $aray_sessao) . ") ORDER BY RAND() LIMIT 1"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adson, assim não dá porque o DISTINCT faria efeito só um ID, sendo que o user já teria passa, por exemplo, por varias perguntas (ids), então teria que ser DISTINCT(todos os ids até a pergunta atual), mas como falei pro Dee, ficaria muito sujo o SELECT.

 

Vinicius tem um exemplo ae, é que eu num só muito de usar arrays saka! :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra coisa que você pode fazer é o seguinte, você cria um cookie ao entrar na página, e na tabela das resposatas você cria dois campos id_pergunta e nome_cookie,aí no insert você manda inserir o valor do cookie e o id da pergunta, aí você pode fazer um select na tabela respostas tipo select id_pergunta from respostas where nome_cookie='$nome_cookie_que_foi_criado'.....

 

aí no seu select você coloca id<>'$id_pergunta' ..... mais ou menos isso, não ta bem explicado mais dar pra entender...

 

 

qualquer dúvida posta aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.