我们有一个数据库,其中包含 70 多个表和超过 10k 的用户。数据库中的一个表用于记录用户的最新操作/更改,以便在比赛周结束(足球比赛)之前将它们挂起,我们称此表为“替补”。
但是,每周当我们在游戏周结束时推进系统(应用更改)时,我们会检查是否存储了任何关于用户更改的重复数据(我们刚才已经注意到),并手动将它们从数据库。
行有主键(不重复)只有数据是重复的。这就像插入查询被触发了两次。 (不确定这个或为什么)
示例:假设用户有一支足球队(场上 11 人,替补 4 人) 当用户选择球员并点击替补时,该球员(在场上)将与坐在替补席上的球员(替补)交换。此过程将立即发生,无需用户保存 (JavaScript)。但是,它不会保存在团队详细信息中,而是保存在跟踪更改的 Substitute 表中。
用户想要移除玩家 1 并进入玩家 12 (1->12)。第一步系统会记录
id Team from_player to_player
0 x 1 12
如果用户进行另一个替换
id Team from_player to_player
0 x 1 12
1 x 2 13
当用户替换回播放器 (12->1) 时,该记录将被删除 (1->12),因为用户替换回播放器,后来的替补取消了第一个。
id Team from_player to_player
1 x 2 13
但有时它会多次记录该行
id Team from_player to_player
0 x 1 12
1 x 1 12
2 x 1 12
3 x 2 13
或者副本可能介于两者之间
id Team from_player to_player
0 x 1 2
1 x 2 13
2 x 1 2
3 x 1 2
N.B 这种情况每周只会发生在大约 10-100 名用户身上,尽管我们的数据库中注册了超过 10,000 名用户。
那么您认为造成问题的原因是什么?
我不想使用INSERT IGNORE
,我想找到问题的根源并阻止它。
所以基本上,我的问题是:
1- 可能是服务器或客户端问题吗?
2- 在某些情况下可以调用/触发 ajax 代码两次吗?
3- 在执行相同查询两次的 sql server 中是否存在错误?
非常感谢您的帮助。
更新:
4- 如果问题出在客户端,我该如何检查?有什么建议的方法吗?
如果有人问,当用户换回同一个球员时会发生什么。 假设这是原始玩家设置的一部分。
| Original Status | After First Subs|After Second Subs|
| | | |
On the field | p1 | P12 | P1 |
-----------------------|-----------------|-----------------|-----------------|
| | | |
Subs(at the bench) | p12 | P1 | P12 |
| | | |
原始状态 p1 在场上,p12 在替补席上(替补) 行动记录: s1- P1->P12 状态= P12 在场上。板凳上的P1
s2- P12->P1 状态= P1 回到场上。 P12 回到替补席。
请注意,不会记录 s2,但会删除 s1。就像 A * -1,然后又是 -A * -1。将相互抵消。
最佳答案
ajax mite 被多次调用,尝试使用您的 Firebug 进行检查。在成功标志出现之前,您可能需要禁用替代方法。
关于php - 使用 PHP 和 AJAX 在数据库表中重复输入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12670699/