AJUDA COM SORTEIO SQL

MySQL

Delphi

05/01/2016

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.
Wilter Porto

Wilter Porto

Curtidas 0

Respostas

Raimundo Pereira

Raimundo Pereira

05/01/2016

Experimente fazer o sorteio:

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

Se ajudar implemente ao seu código
GOSTEI 0
Raylan Zibel

Raylan Zibel

05/01/2016

- 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?
GOSTEI 0
Wilter Porto

Wilter Porto

05/01/2016

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.
GOSTEI 0
Raylan Zibel

Raylan Zibel

05/01/2016

editado...
GOSTEI 0
Ruy Salles

Ruy Salles

05/01/2016

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.
GOSTEI 0
Wilter Porto

Wilter Porto

05/01/2016

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.
GOSTEI 0
Raylan Zibel

Raylan Zibel

05/01/2016

É mais um problema de lógica do que de SQL ou Delphi.
GOSTEI 0
Ruy Salles

Ruy Salles

05/01/2016

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.
GOSTEI 0
POSTAR