[mysql]想要只是一次在一天中发生的 php 查询

标签: sql MySQL PHP
发布时间: 2017/4/9 22:59:41
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想要这段代码来做查询只是一旦在一天内发生的代码将被隐藏或禁用一些如何后, 是可能吗?谢谢:)

$time = date("G");
if($time >= 12 && (isset($_SESSION['UserName']))){
    mysql_query("Update users set diamonds = diamonds+1 where username = 'NaiTreNo'");
}

解决方法 1:

当然 cronjob 是一个开始,但即使 cronjobs 可能会失败或您可能有多台计算机的同一个数据库。

扩展包含列的表 last_daily_diamond datetime ,可以设置当用户获取其钻石,所以︰

update users set diamonds=diamonds+1, last_daily_diamond = now()
where username='flaschenpost' and last_daily_diamond < now() - interval 24 hour
;

如果你的意思是天和不 24 小时天的日历,然后使用不 datetime ,但 date last_daily_diamond 列。

update users set diamonds=diamonds+1, last_daily_diamond = curdate()
where username='flaschenpost' and last_daily_diamond < 

curdate();

如果用户 10 天后,并应获得 10 颗钻石 (这一决定是你客户/老板/自己 !),它获取

update users set diamonds=diamonds+1, last_daily_diamond = last_daily_diamond + interval 1 day
where username='flaschenpost' and last_daily_diamond < 

curdate();

(如果查询本身是发送往往不够)

或者有点更复杂 (现在还没有测试)

update users set diamonds=diamonds+
(@given := round((unix_timestamp(curdate()) - unix_timestamp(last_daily_diamond))/(24*60*60))), 
last_daily_diamond = curdate() + interval @given days
where username='flaschenpost' and last_daily_diamond < 

curdate();

如果你不能扩展用户表,您还可以创建为此额外的表和用户表的联接。

官方微信
官方QQ群
31647020