我正在为会员网站编写一个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
我很难从现在的位置进行测试。我需要找到一个解决方案,所以我希望有人可以告诉我这是限制为每天一次还是每24小时一次 - 如果是后者,我会指出正确的方向。
TIA:)
答案 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())
在这里,您清楚地比较了两个日期,一个来自您的字段,另一个来自当前的相等日期。