【发布时间】:2016-03-06 04:16:43
【问题描述】:
我花了一个多星期的时间试图了解如何防止重复的 mysql 条目进入我的表。我怎样才能防止这种情况发生?如果我有从最后 5 秒到小数秒的条目,我不希望用户更新他/她的位置。例如,我只想要第一个条目,以及忽略后续条目的方法。
我的专栏的类型是timestamp(6)
| 40 | 4 | 5 | 2016-03-05 22:19:57.572771 |
| 41 | 4 | 5 | 2016-03-05 22:19:57.574012 |
| 42 | 4 | 5 | 2016-03-05 22:19:57.589436 |
| 43 | 4 | 5 | 2016-03-05 22:19:57.598959 |
| 44 | 4 | 5 | 2016-03-05 22:19:57.605516 |
我尝试过这样的事情:
"SELECT * FROM checkins WHERE user_id = " + req.body.userID + " AND TIMESTAMPDIFF(SECOND, entered_at, current_timestamp(6)) < 5;"
与
"SELECT * FROM checkins WHERE user_id = " + req.body.userID + " AND entered_at <= now() AND entered_at >= date_sub(now(), interval 1 SECOND);"
不幸的是,这些都不起作用。提前感谢您的任何指导。
编辑
为了清楚起见,我正在做的是尝试查看特定用户是否在过去 5 秒内输入了条目,精确到小数秒。如果他有,那么当服务器端返回行时,rows.length > 0 将为真。如果事实上rows.length 大于零,我将我的proceedToUpdateUsersLocation 变量设置为false。我希望这是一个明确的解释。我试图通过检查过去 X 秒内表中没有重复项来防止多个条目。
【问题讨论】:
-
因为我想要表中所有重复的条目,所以我使用 select
-
好的 - 但首先你谈到了防止重复。选择不会导致重复
-
哦,我明白你缺少什么了。如果我在服务器上返回 rows.length > 0,这意味着我有重复,所以我将一个变量设置为 false,这样它就不会再次更新用户位置。这个逻辑正在服务器端完成。在这里,我只是查看是否有以前的条目,并通过查看 connection.query 返回的内容来检查。这有意义吗?
-
并非如此。如果在您检查时出现“上一个条目”怎么办?
-
这就是为什么我检查表是否在过去 5 秒内有来自该特定用户的任何条目,它只是没有捕捉到同一秒内发生的条目。这就是为什么在我的代码示例中它们都在第 57 秒输入