【问题标题】:Check if duplicate record within the last 10 seconds检查最近 10 秒内是否有重复记录
【发布时间】:2015-03-10 19:19:24
【问题描述】:

是否可以检查过去 10 秒或 20 秒内是否插入了重复记录?

至于现在我正在这样做:

INSERT INTO user_pointshistory (ptimestamp, player, points) VALUES (NOW(),'$playerid',$thisPoints)

我要检查的是在过去 10 秒内插入了来自同一玩家的具有完全相同分数的记录!

这个可以吗?

---------- 编辑 --------------

我现在已经尝试过了,但没有运气?我不应该这样做吗?

$sql = "SELECT * FROM user_pointshistory WHERE player='111' AND points=10000 AND ptimestamp < DATE_SUB(NOW(), INTERVAL 10 SECOND)";
$result = mysqli_query($conn,$sql) or die(mysqli_error());
if($row = mysqli_fetch_array($result)){
    echo 'GOT A RECORD';
} else {
    echo 'READY FOR AN RECORD';
    $sql = "INSERT INTO user_pointshistory (ptimestamp, player, points) VALUES (NOW(),'111',10000)";
    mysqli_query($conn,$sql);
}

希望得到帮助并提前感谢:-)

【问题讨论】:

  • 您是否在行中存储任何类型的时间戳?那肯定会有所帮助。
  • Ups,是我发布的错误 SQL。刚刚用正确的 SQL 编辑了我的帖子:-/ ptimestamp 是 DATETIME
  • 这个答案可能对stackoverflow.com/a/4056660有帮助
  • 这个if($row = mysqli_fetch_array($result)){ 不起作用,$row 未定义。我会用$numrows=mysqli_num_rows($result); if($numrows &gt; 0){ echo "GOT A RECORD"; } 替换它,我很确定它会起作用。 @曼萨
  • @Fred-ii- 好的,到目前为止一切都很好,但现在我一直得到“记录”?我错过了什么!?

标签: php mysqli duplicate-removal


【解决方案1】:

以下内容不起作用,因为$row 未定义,您最好使用mysqli_num_rows() 检查该行是否存在。

if($row = mysqli_fetch_array($result)){

我会将其替换为:

$numrows = mysqli_num_rows($result); 
  if($numrows > 0){ 
    echo "GOT A RECORD"; 
}

正如你在 cmets 中所说,将 ptimestamp &lt; DATE_SUB 中的 &lt; 转换为 &gt;

【讨论】:

    【解决方案2】:

    我强烈支持 rjdown 的响应,因为您应该创建一个时间戳,因此您可以在提交新行之前先检查存储了时间戳的数据库并生成一个新的时间戳。

    【讨论】:

    • 抱歉,我发布的 SQL 错误... ptimestamp 是一个 DATETIME 字段
    • 好的,所以现在在插入条目之前,您将对即将插入的播放器进行 SELECT 查询,如果 $newdate - $row['ptimestamp'] >= 10 { INSERT } ELSE {回声错误}
    • 好吧,只是觉得这可能一句话就可以搞定,但我会试试这个(y)
    • 我试过了,和你说的有点不同……但还是没有运气?为什么不能这样做?!?!查看发起的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2022-01-09
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多