正确计算facebook'喜欢'

时间:2011-12-25 14:26:48

标签: php sql sql-like

说我有类似的情况。 我有一个页面;当用户点击“赞”按钮时,我会保留相同的数量。 现在这是我的问题。

说我当前的页数是50。

我的表包含page_id和其他page_description以及当前的喜欢总数。 我还有一个包含页面ID和用户ID的表LIKES。

现在,我的like.php脚本正在做什么,它从表中读取当前总计数,然后通过向表添加一个表来更新该表。此外,还输入了LIKE表的新条目。

假设我有10个用户同时喜欢这个页面。 脚本太阳和所有用户在初始计数和添加一个之后获得50;每个用户仅将其更新为51。

但实际计数应为50 + 10 = 60。

我如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以在SQL脚本本身中执行添加逻辑。你正在遇到一个名为“Last write succeeded”的概念。这种情况正在发生,因为您使用的是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中。只要您的服务器没有经历大量负载,您就应该规范化该数据。