MYSQL+;PHP每天制作一个sql执行器
我希望为访问特定页面的用户执行每日SQL。然而,我只希望这种情况发生一次,每24小时与特定的用户 (我使用cookies吗?我使用什么SQL查询?PHP代码是什么?) 我的桌子是这样的: 我想执行一个类似于以下内容的mysql查询:MYSQL+;PHP每天制作一个sql执行器,php,mysql,Php,Mysql,我希望为访问特定页面的用户执行每日SQL。然而,我只希望这种情况发生一次,每24小时与特定的用户 (我使用cookies吗?我使用什么SQL查询?PHP代码是什么?) 我的桌子是这样的: 我想执行一个类似于以下内容的mysql查询: INSERT INTO `user_badges` VALUES ('1', 'ADM', '0'); 如上所述,我希望为每天访问PHP页面一次的用户执行此操作。谢谢。创建如下表格: CREATE TABLE badge_update_time ( us
INSERT INTO `user_badges` VALUES ('1', 'ADM', '0');
如上所述,我希望为每天访问PHP页面一次的用户执行此操作。谢谢。创建如下表格:
CREATE TABLE badge_update_time (
user_id INT(11) PRIMARY KEY,
last_updated DATETIME
);
然后,将插入到user\u-badges
表中的脚本将首先执行如下查询:
SELECT COUNT(*) AS count
FROM badge_update_time
WHERE user_id = 1 AND last_updated > DATE_SUB(NOW(), INTERVAL 1 DAY)
如果表中没有该用户的行,或者该行超过1天,则返回count==0
。因此,您的代码可以:
if ($row['count'] == 0) {
mysqli_execute($conn, "INSERT INTO badge_update_time VALUES (1, NOW()) ON DUPLICATE KEY UPDATE last_updated = NOW()";
mysqli_execute($conn, "INSERT INTO `user_badges` VALUES ('1', 'ADM', '0')");
}
一种可能是使用MySQL的事件调度器 在应用程序的
用户
表中添加一列,如
been_there BOOLEAN NOT NULL DEFAULT FALSE
当用户访问相关页面时
$stmt = $dbh->prepare("UPDATE users
SET been_there = TRUE
WHERE user_id = :user_id");
$stmt->execute(array(":user_id" => $user_id));
$event = "CREATE EVENT reset_" . $user_id . " IF NOT EXISTS
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 24 HOUR
DO
UPDATE users SET been_there = FALSE WHERE user_id = " . $user_id;
$dbh->exec($event);
(请注意,我通常不赞成使用动态SQL,但是在本例中,我不确定是否还有其他方法,并且我假设$user\u id
已被正确清理。)
与cron
相比,它的最大优势在于它将数据库的计划更新置于数据库本身的控制之下,因此它们不太可能由于数据库之外的情况而失败
我还没有测试过语法是否正确,我将错误处理留给读者作为练习。有一个表,其中包含每个用户上次执行查询的时间。你的服务器应该检查这个表,看看它是否已经至少24小时了,否则跳过SQL。你需要使用cron作业。有人有任何PHP代码可以帮助你完成这项工作吗。我真的很差劲。没有PHP,你可以通过将stdin从文件重定向到mysql命令行工具来实现这一点。mysql db_name