2012-10-01 60 views
1

我們擁有一個擁有超過70個表並擁有超過10k個用戶的數據庫。數據庫中的其中一個表格是記錄用戶的最新動作/變化,以便在比賽結束之前保持待用狀態(足球比賽),我們稱之爲「替代」表。然而,每週我們在比賽週末推進系統(應用更改)時,我們檢查是否存在關於用戶更改(我們已經注意到前一段時間)的任何重複數據,並手動刪除它們來自數據庫。使用PHP和AJAX在數據庫表中進行重複數據輸入

這些行具有主鍵(不重複),只有數據被複制。這就像插入查詢被觸發兩次。 (不知道這爲什麼)

例子:假設用戶有一隊的球員(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 

NB出現這種情況只有每週10-100左右的用戶,即使我們的數據庫中有超過10k個用戶註冊。

那麼你認爲是什麼導致了這個問題呢? 我不想用INSERT IGNORE,我想找到問題的根源並阻止它。

所以基本上,我的問題是:

1是否有可能是服務器或客戶端的問題?

2-可以在某些情況下調用/觸發兩次ajax代碼?

3-在執行相同查詢兩次的sql服務器中可能有錯誤嗎?

非常感謝您的幫助。

UPDATE:

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。這將會取消對方。

回答

1

ajax蟎被稱爲不止一次,試圖檢查使用你的螢火蟲。您可能需要禁用替代方法,直到成功標誌啓動。

+0

有一個漏洞,它允許用戶使用同一個播放器兩次的代碼:((但是,我試圖同時調用ajax方法多次,而且,系統將它們記錄爲單獨的請求。 – MJoraid

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,貴函數刪除 「ALL」 以前的記錄或僅有1?

+0

應該只有一個,只有一個1-> 12。玩家不應該重複同一玩家兩次!這就是我想解決的問題。但是,如果發生你所描述的,老實說,不知道。 我將不得不檢查。好點btw。感謝回覆。 – MJoraid

+0

對於如何測試ajax是否被調用兩次,你有什麼建議嗎?由於這隻發生在成千上萬的用戶中,我真的不確定代碼是否有錯誤。但是,如果有,不應該發生所有?有人提出,如果出現網絡問題或服務器故障並且用戶多次點擊,可能會導致多次執行相同的命令。 – MJoraid

相關問題