PHP/MySQL脚本赢得';不要让用户在一段时间内访问多次

PHP/MySQL脚本赢得';不要让用户在一段时间内访问多次,php,mysql,Php,Mysql,我正在尝试为我正在开发的游戏编写一个脚本,该脚本只奖励用户每天点击一次特定链接 我认为最好的方法是在奖励表中为用户历史记录创建一个字段,记录用户名和他们获得奖励的时间 因此,每次单击链接时,这些值都需要与过去24小时内的所有其他值一起存储在字段“历史记录”中: $username = GET['username']; $time = time(); 在一个字段、多维数组中存储多个值的最佳方法是什么?我将如何存储它们并在以后检索它们 在我弄清楚如何从数组中检索值之后,我想使用preg_match

我正在尝试为我正在开发的游戏编写一个脚本,该脚本只奖励用户每天点击一次特定链接

我认为最好的方法是在奖励表中为用户历史记录创建一个字段,记录用户名和他们获得奖励的时间

因此,每次单击链接时,这些值都需要与过去24小时内的所有其他值一起存储在字段“历史记录”中:

$username = GET['username'];
$time = time();
在一个字段、多维数组中存储多个值的最佳方法是什么?我将如何存储它们并在以后检索它们

在我弄清楚如何从数组中检索值之后,我想使用preg_match()来查找用户名的重复项。如果返回true,则检查time();,如果超过24小时,则更新时间();要当前和奖励,否则如果不超过24小时没有新的奖励,如果为假,那么他们会得到奖励

有什么想法吗


编辑:好的,那么如果把值放在一个字段中不是最好的方法,那是什么呢?每天都会有很多奖励(100),而且它们会很快过期,所以在用户信息表中为每个奖励创建一个字段肯定不是最好的方法,不是吗?这意味着每次添加新奖励时,必须将新字段插入到用户信息表中。。。然后,当奖励到期时,所有这些列都必须删除。这就是你们的建议吗?

为什么要使用多维数组和正则表达式?你有MySQL,使用它

每个奖励存储一行

| user_id | last_rewarded_at |
|   42    |     2011-01-11   |
通过这种方式,您可以轻松地添加新奖励,检查用户在给定日期是否获得奖励等。

对于“在一个字段中存储多个值的最佳方法是什么”的答案是“不要这样做”


一个字段-一个值,就这么简单。

如果你真的觉得有必要忽略这些答案,仍然将所有数据存储在一个字段中(糟糕的做法),那么使用json将多维数据存储在一个字段中,使用json_编码将其存储,使用json_解码将其作为对象读取

<?php
$stored = json_encode($array_data);

$read = json_decode($stored);
?>

这样做会导致性能问题

不要在一个DB列中存储多个值。。。。如果需要根据用户的记录存储多个历史记录条目,请规范化数据库rewards@user1142872:每个奖励必须有一行,而不是一列。并将它们存储在单独的表中,以免影响用户表。@Mob:那是因为他不理解它。@SergioTulentsev我想他无法正确解释这个问题,因为这些答案都没有一点帮助。@user1142872:要么如此,要么你想做一些我们无法理解的奇怪事情。:-)
$read = (array) json_decode($stored);