2011-12-25 63 views
0

說我有類似的情況。 我有一個頁面;並且當用戶點擊類似按鈕時,我正在保持點贊數。 現在,這是我的問題。保持正確的Facebook數量'喜歡'

說我目前的網頁數爲50

我的表包含PAGE_ID,和其他page_description,也喜歡目前總數。 此外,我有一個表包含頁面和用戶ID的id。

現在,我的like.php腳本正在執行的操作是,它從表中讀取當前的總計數,然後通過向表中添加一個來更新該表。還輸入LIKE表的新條目。

假設我有10個用戶同時喜歡這個頁面。 腳本太陽和所有的用戶獲得50作爲初始計數,並添加一個後;每個用戶只更新它到51。

但是真正的計數應該是50 + 10 = 60。

我該如何解決這個問題?

回答

0

您可以在SQL腳本本身中執行添加邏輯。您正在遇到一個名爲「上次寫入成功」的概念。發生這種情況的原因是您使用的PHP頁面代碼不保證具有任何類型的讀/寫鎖定。你可以添加這個邏輯,但是這會更容易寫出你的更新sql像這樣:

INSERT INTO tbl_likes (page_id) VALUES (12) 
UPDATE TABLE tbl_pages (page_id, like_count) VALUES (12, (SELECT COUNT(page_id) FROM tbl_likes WHERE page_id = 12)) 

這將是這樣的。該算法的一個特別之處在於,您需要在增加tbl_pages之前將數據插入到tbl_likes中,並且tbl_pages值始終取決於tbl_likes記錄,而不是由PHP頁面提交的某個數字。

只是一個說明,真的沒有理由保持總數在tbl_pages。只要服務器沒有承受大量負載,就應該對這些數據進行規範化處理。

+0

哦。你想把這個SQL邏輯放在一個事務中。 – 2011-12-25 14:51:27

+0

此查詢如何增加值? – Kraken 2011-12-25 16:28:17

+0

第二個子句(update table子句)將like_count設置爲具有該page_id的tbl_likes表中的行數。這聽起來像你已經將這些信息存儲在數據庫中。 – 2011-12-26 23:47:04