С учетом таблицы голосов (пользователи голосуют за выбор и должны указать адрес электронной почты):
votes
--
id: int
choice: int
timestamp: timestamp
ip: varchar
email: varchar
Каков наилучший способ подсчета «уникальных» голосов (пользователь представляет собой уникальную комбинацию электронной почты + ip), учитывая ограничение, которое они могут голосовать только дважды в час?
Можно подсчитать количество часов между первым и последним голосованием и определить максимальное количество разрешенных голосов за этот период, но это позволяет пользователям сжимать все свои голоса, скажем, в одночасовое окно, и при этом иметь их насчитали.
Я понимаю, что анонимное онлайн-голосование изначально ошибочно, но я не уверен, как это сделать с SQL. Должен ли я использовать внешний скрипт или что-то вместо этого? (Для каждого варианта, для каждой пары email + ip, получите голос, вычислите следующую + 1ч метку времени, посчитайте / отмените / подсчитайте голоса, перейдите к следующему часу и т. Д.)