限制竞争进入每天一次

时间:2011-03-21 22:46:48

标签: php mysql date restrict

我正在为会员网站编写一个PHP竞赛脚本,需要将每个成员每天的条目限制为一个。到目前为止,我有以下MySQL代码:

SELECT ce_id 
  FROM competition_entries 
 WHERE ce_c_id = '$c_id' 
       AND ce_sub_id = '$user_id' 
       AND cte_date >= SYSDATE() - INTERVAL 1 DAY
  • ce_c_id是比赛ID,
  • ce_sub_id是会员ID,
  • cte_date是条目的MYSQL日期时间戳。

我很难从现在的位置进行测试。我需要找到一个解决方案,所以我希望有人可以告诉我这是限制为每天一次还是每24小时一次 - 如果是后者,我会指出正确的方向。

TIA:)

3 个答案:

答案 0 :(得分:2)

创建一个由user_id,competition_id和日期类型列组成的主键。

检查用户是否已放置条目:

select count(*)
from competition_entries
where ce_c_id = '$c_id' 
    AND ce_sub_id = '$user_id' 
    AND cte_date = current_date()

答案 1 :(得分:1)

  

我希望有人可以告诉我这是限制为每天一次还是每24小时一次

看起来是24小时:

mysql> select sysdate(), sysdate() + interval 1 day;
+---------------------+----------------------------+
| sysdate()           | sysdate() + interval 1 day |
+---------------------+----------------------------+
| 2011-03-21 15:50:56 | 2011-03-22 15:50:56        | 
+---------------------+----------------------------+
1 row in set (0.01 sec)

如果你需要“明天”,就像在今晚23:59过去一分钟一样,考虑把事情扼杀到简单的DATE分辨率:

mysql> select DATE(sysdate()), DATE(sysdate()) + interval 1 day;
+-----------------+----------------------------------+
| DATE(sysdate()) | DATE(sysdate()) + interval 1 day |
+-----------------+----------------------------------+
| 2011-03-21      | 2011-03-22                       | 
+-----------------+----------------------------------+
1 row in set (0.00 sec)

只考虑日期而不是时间,你的截止日期将在午夜有效到期。但请注意 - 您将在MySQL服务器上受到时间的限制,如果它们位于不同的计算机上,则可能与应用程序服务器上的时间不同。

答案 2 :(得分:1)

没有测试就无法确定,但我猜测它是每24小时一次。

请尝试以下方法:

SELECT ce_id FROM competition_entries WHERE ce_c_id = '$c_id' AND ce_sub_id = '$user_id' AND DATE(cte_date) == DATE(SYSDATE())

在这里,您清楚地比较了两个日期,一个来自您的字段,另一个来自当前的相等日期。