Mysql
 sql >> Database >  >> RDS >> Mysql

La lotteria Php emette problemi con più vincitori

penso che tu abbia scelto i formati di archiviazione sbagliati per i numeri scelti. L'approccio standard consiste nell'utilizzare valori binari a cui è impostato l'N-esimo bit se viene scelto il numero N.

Considera questo esempio:l'utente sceglie i numeri "2 4 5 9 11". Impostando i bit corrispondenti su 1 si ottiene '10100011010' che è decimale 1306. Ora la lotteria seleziona "4 7 9 12 13" che è '1100101001000' ==6472. Eseguire un AND bit per bit su entrambi i valori e contare il numero di bit impostato nel risultato:

SELECT BIT_COUNT(1306 & 6472)

questo ci dice immediatamente che l'utente ha 2 scelte corrette. Altrettanto facile puoi selezionare i vincitori "completi":

SELECT * FROM tickets WHERE BIT_COUNT(tickets.pick & lotto.pick) = 5

oppure ordina i biglietti in base al numero di scelte corrette

SELECT * FROM tickets ORDER BY BIT_COUNT(tickets.pick & lotto.pick) DESC