使用PHP和AJAX在数据库表中重复数据输入

时间:2012-10-01 09:32:34

标签: php javascript mysql ajax

我们有一个拥有超过70个表的数据库,用户数超过10k。数据库中的一个表是记录用户的最新动作/变化,以便在游戏周结束前将其保持待定(足球比赛),让我们称这个表为'替补'。

然而,每周我们在游戏周结束时推进系统(应用更改),我们检查是否存在关于用户更改的任何重复数据(我们已经注意到了一段时间),并从中手动删除它们数据库。

这些行具有主键(不重复),只有数据重复。就像插入查询被触发两次一样。 (不确定这个或为什么)

示例:假设用户拥有一支足球运动员队伍(场上11名,替补队员4名) 当用户选择球员并点击替补时,该球员(场上)将与替补席上的球员交换(替补)。此过程将立即发生,无需用户保存(JavaScript)。但是,它不会保存在团队详细信息中,而是会保存在跟踪更改的替换表中。

用户想要移除玩家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即使在我们的数据库中注册的用户超过10k,但每周只有大约10-100个用户。

那么您认为导致问题的是什么? 我不想使用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    Status = P1返回该字段。 P12回到替补席上。

请注意,s2不会被录制,但是,s1将被删除。它就像A * -1,然后再次-A * -1。意志相互抵消。

2 个答案:

答案 0 :(得分:1)

ajax mite不止一次被召唤,试图使用你的萤火虫进行检查。在成功标志启动之前,您可能需要禁用替代方法。

答案 1 :(得分:0)

也许用户通过UI不止一次触发了查询。由于id是PK,因此两次触发相同的查询。

另一个问题。

当遇到这种情况时:

id   Team   from_player  to_player
0       x      1            12
1       x      1            12
2       x      1            12
3       x      2            13

当用户替换12-> 1时,您的功能是删除“所有”以前的记录还是只删除1?