2012-08-02 25 views
0

我基本上收集选票特定用户的表:查询验证防作弊系统

ID | user_id | ip | timestamp 

每当有人投票支持一个用户,创建一个条目记录他们投票支持,user_ID的他们IP地址和时间和日期。 为了防止作弊,我们不允许每个用户每IP每天超过20票。

现在我想验证这些投票,从给定日期开始,我自己提出了以下查询,但我绝不是专家,所以如果有人可以告诉我,如果我有这个正确的我将不胜感激。

SELECT count(*) As `votes`, user_id, ip, DATE(timestamp) the_date 
FROM `user_votes` 
GROUP BY user_id, ip, the_date 
HAVING the_date > '2012-07-26' 
ORDER BY the_date ASC, user_id ASC, votes DESC 
+0

我会做count(user_id)而不是count(\ *)。如果您有大量数据,count(\ *)可能会触发一些性能问题 – TerenceJackson 2012-08-02 07:11:49

回答

0

试试这个:

SELECT count(*) As `votes`, user_id, ip, DATE(timestamp) the_date 
FROM `user_votes` 
where the_date > '2012-07-26' 
GROUP BY user_id, ip, DATE(timestamp) 
having count(*)>20 
ORDER BY DATE(timestamp) ASC, user_id ASC, votes DESC 

有COUNT(*)> 20会给你计数超过20

0

要获得用户已经投票的有效数字,你可以试试这个:

SELECT COUNT(*) As `votes`, user_id, ip, DATE(timestamp) the_date 
FROM `user_votes` 
WHERE DATE(timestamp) > '2012-07-26' 
GROUP BY user_id, ip, the_date 
HAVING COUNT(*) <= 20 
ORDER BY the_date ASC, user_id ASC, votes DESC;