AJUDA COM SORTEIO SQL

05/01/2016

1

Boa noite...

Preciso realizar um sorteio de clientes com alguns parâmetros e estou precisando de ajuda.

Veja bem vamos premiar alguns de nossos clientes. Eles tem 3 opções de brindes.
Podem escolher qualquer uma, contudo o sistema sorteará aleatoriamente e considerará suas escolhas. Caso tenha sido sorteado na 1ª opção, não pode ser sorteado na 2ª nem na 3ª.
Mas se for sorteado na 2ª não pode ser na 1ª nem na 3ª e preciso também que os clientes que forem nossos maiores compradores tenham preferência sobre os brindes, uma forma de retribuir. Ah esta informação já tenho.

Assim que encerrar a quantidade de brindes o sistema não pode sortear mais.

O mais próximo que conseguir foi o comando abaixo.


SELECT * FROM clientes WHERE id ORDER BY RAND() LIMIT 1

Usando Delphi 2010 e MySQL.
Responder

Posts

06/01/2016

P2

Experimente fazer o sorteio:

table.First;
table.MoveBy(Random(table.recordcount));
numerodametricula := table.fieldbyname(´matricula´).asinteger;

Se ajudar implemente ao seu código
Responder

06/01/2016

Raylan Zibel

- Para cada brinde fará o sorteio e o cliente que ganhou não poderá ganhar novamente?
- Cliente pode escolher em qual dos sorteios (brindes) quer participar?
- Só os maiores compradores podem escolher em qual vai participar ou qualquer cliente pode?
Responder

06/01/2016

Wilter Porto

isso. cada cliente poderá ganhar somente 1 brinde dentre as três opções que escolher e caso tenha ganho não poderá ganhar novamente.

qualquer cliente pode. contudo com base no volume de compras os clientes que compram mais tem preferência sobre a primeira opção de brinde.
Responder

06/01/2016

Raylan Zibel

editado...
Responder

06/01/2016

Ruy Salles

Na sua tabela crie um campo do tipo char(1) como o nome stsSorteado ou algo parecido, atribua o valor 'N' para os brindes.

Faça o update no registro logo após o sorteio do brinde alterando o stsSorteado para 'S'

Monte o select assim:

SELECT ID, NOMCLIENTE
FROM clientes
WHERE stsSorteado = 'N'
AND id in (select round(rand() * 100,0))

Em seu sistema de sorteio, faça um loop até ele retornar uma valor não nulo

*Obs. Esta consulta foi feita levando como base da dados o MySQL

Espero ter ajudado.
Responder

06/01/2016

Wilter Porto

entendi. mas, veja bem os clientes têm opção de somente 3 brindes que possuem quantidades pré-definidas. tipo churrasqueira elétrica 90 unidades; cafeteira 25 e forno de microondas 38.

caso o cliente não tenha sido sorteado na churrasqueira, ele poderá concorrer na cafeteira.
Responder

07/01/2016

Raylan Zibel

É mais um problema de lógica do que de SQL ou Delphi.
Responder

07/01/2016

Ruy Salles

Então crie 03 campos de sorteio

stsSorteado01, stsSorteado02, stsSorteado03 todos do tipo char(1) e com valor padrão 'N'

No update, verifique se o stsSorteado01 está 'S', caso positivo verifique o stsSorteado02 e caso esteja 'S' altere stsSorteado03.

Faça o select desta maneira:

SELECT ID, NOMCLIENTE
FROM clientes
WHERE (stsSorteado01 = 'N' or stsSorteado02 = 'N' or stsSorteado03 = 'N')
AND id in (select round(rand() * 100,0))


Espero ter ajudado.
Responder