Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A loteria PHP emite problemas com vários vencedores


acho que você escolheu os formatos de armazenamento errados para os números escolhidos. A abordagem padrão é usar valores binários que tenham N-ésimo bit definido se o número N for escolhido.

Considere este exemplo:o usuário escolhe os números "2 4 5 9 11". Definir os bits correspondentes para 1 fornece '10100011010' que é o decimal 1306. Agora a loteria escolhe "4 7 9 12 13" que é '1100101001000' ==6472. Execute um AND bit a bit em ambos os valores e conte o número de bits definidos no resultado:
SELECT BIT_COUNT(1306 & 6472)

isso imediatamente nos diz que o usuário tem 2 escolhas corretas. Com a mesma facilidade, você pode selecionar os vencedores "completos":
SELECT * FROM tickets WHERE BIT_COUNT(tickets.pick & lotto.pick) = 5

ou ordene os tickets pelo número de escolhas corretas
SELECT * FROM tickets ORDER BY BIT_COUNT(tickets.pick & lotto.pick) DESC