php - 试图让 php 查询每天只发生一次

标签 php mysql sql

我希望这段代码一天只查询一次,这意味着在它发生后代码将被隐藏或禁用,这可能吗?谢谢:)

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

最佳答案

当然,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,而要为 last_daily_diamond 使用 date 列。

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();

如果你不能扩展用户表,你也可以为此创建一个额外的表并加入用户表。

关于php - 试图让 php 查询每天只发生一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32616036/

相关文章:

PHP 处理错误

php - 从 PHP 7.1.x 迁移到 PHP 7.2.x json_decode() 更改

mysql - SQL CONCAT 字符串 + WHERE 子句中的列

php - Javascript 删除 JSON 元素

php - 无法解析主机名(即使添加 INTERNET 权限后)

php - MySql语法错误;可以在一个查询中删除两个表吗?

mysql - 如何使用内部查询优化mysql查询

mysql - 将表与其自身连接

MySQL加入SELECT COUNT()

php - 选择相互关注者