2012-09-06 87 views
0

使用PHP和MySQL我想使用PARENT和多子關係來跟蹤註冊。 如果超過1個用戶嘗試使用相同的父代碼註冊,則會出現問題。該家長只會被記入1個用戶而不是2個。 解決方案據我所知是LOCK記錄。或者使用服務器時間和記錄時間戳確定上次更新。使多個用戶同時更新到同一記錄

#THIS IS NOT PRODUCTION CODE, BUT JUST INTENDED TO DEFINE MY PROCESS 
#PLEASE ADVISE AND MAKE ADJUSTMENTS AS YOU SEE FIT 

$sqlget = SELCT * record of PARENT and WHERE id is of PARENT 
$ts -> timestamp; 
$st -> servertime; 
$af -> aff_number; 

現在我要檢查父, 如果更新的發生的時間戳的最後一條記錄更新不到10秒AGO - 我想重新運行我$ sqlget

如何轉換$ ts轉換爲INT並將$ st轉換爲INT,以便我可以運行IF語句 以循環$ sqlget如果我的條件失敗。

if($ts <= $st by 10 seconds) { wait 10 seconds and rerun sqlget } 
else { get current $af (INT) and +1; UPDATE record; close connection; 
META-refresh to next page; } 

那麼這個過程似乎功能?這是否會確保即使超過1個孩子同時簽署了每個孩子註冊,也會正確記錄一個父母? 我不希望多人同時註冊,但他們可能會發生,我必須確保父母正確記分。

+0

「PARENT」記錄如何在每個「CHILD」註冊時記入? – eggyal

+0

「父母」的ID在單獨的桌子上記錄到「孩子」。這個表的目的是保留一個「Parant」子元素的數量。 – fyz

+0

那麼,爲什麼不按照需要選擇parent_id,COUNT(*)FROM子GROUP BY parent_id'呢?或者根據需要更新父項SET子項=子項+ 1項WHERE parent_id =?',這將以原子方式執行(併發會話無法干涉)。 – eggyal

回答

0

我不明白你的SQL結構。

如果您將「信用」與具有相同父母ID的新孩子的外觀相關聯,則任意數量的用戶可能會同時加入。

只要運行:

INSERT INTO affiliations (id_p, ...) VALUES (id_of_parent, whatever_data); 

就大功告成了。父母和孩子是否在單獨的桌子上是無關緊要的。重要的是,必須沒有父母對子女的引用,即您唯一的引用是子行中父母的ID。這樣你就沒有併發問題了。

當你需要知道一個給定的父母有多少孩子得到的,簡單地計算他們:

SELECT COUNT(*)FROM隸屬關係WHERE id_p = id_of_parent;

我懷疑你現在在父行中存儲一個計數器。如果是這樣,不要:它看起來更簡單,但併發性問題使它不值得付出努力。

+0

是的,我的意圖是存儲第一個孩子,第二個孩子和第三個孩子的「父母」數量。我認爲每次'PARENT'想要檢查他們的狀態都是資源佔用者時,對這些記錄執行COUNT查詢。 – fyz

+0

不是。如果您對父母的ID進行索引,則負載可以忽略不計;畢竟,你希望比父母有更多的孩子。所以,最好簡化*小孩*維護。 – LSerni

相關問題