我們擁有一個擁有超過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。這將會取消對方。
有一個漏洞,它允許用戶使用同一個播放器兩次的代碼:((但是,我試圖同時調用ajax方法多次,而且,系統將它們記錄爲單獨的請求。 – MJoraid