Myślę, że wybrałeś niewłaściwe formaty przechowywania dla wybranych numerów. Standardowym podejściem jest użycie wartości binarnych, które mają ustawiony N-ty bit, jeśli wybrano liczbę N.
Rozważmy następujący przykład:użytkownik wybiera liczby „2 4 5 9 11”. Ustawienie odpowiednich bitów na 1 daje „10100011010”, co jest liczbą dziesiętną 1306. Teraz loteria wybiera „4 7 9 12 13”, czyli „1100101001000” ==6472. Wykonaj bitowe AND na obu wartościach i policz liczbę bitów ustawionych w wynik:
SELECT BIT_COUNT(1306 & 6472)
to od razu mówi nam, że użytkownik ma 2 prawidłowe typy. Równie łatwo możesz wybrać „pełnych” zwycięzców:
SELECT * FROM tickets WHERE BIT_COUNT(tickets.pick & lotto.pick) = 5
lub posortuj bilety według liczby poprawnych typów
SELECT * FROM tickets ORDER BY BIT_COUNT(tickets.pick & lotto.pick) DESC