投票の表が与えられた場合 (ユーザーは選択肢に投票し、電子メール アドレスを提供する必要があります):
votes
--
id: int
choice: int
timestamp: timestamp
ip: varchar
email: varchar
1時間に2回しか投票できないという制約を考慮して、「一意の」投票(ユーザーは電子メールとIPの一意の組み合わせ)をカウントする最良の方法は何ですか?
最初の投票と最後の投票の間の時間数を数えて、その時間枠で許可される最大投票数を決定することは可能ですが、これにより、ユーザーはすべての投票を、たとえば 1 時間のウィンドウに圧縮しても、それらをカウントしたままにすることができます。
匿名のオンライン投票には本質的に欠陥があることは認識していますが、SQL でこれを行う方法がわかりません。代わりに外部スクリプトなどを使用する必要がありますか? (選択肢ごと、電子メールと IP のペアごとに、投票を取得し、次の +1h タイムスタンプを計算し、投票をカウント/破棄/集計し、次の時間に進むなど...)