有一个统一的内容,比如论坛、新闻、文章等。内容由一个主题和它的评论组成。用户写话题和评论,需要统计每个用户。
第一个想法 - 创建一个常规表 users_stat,其中包含字段 user_id、forum_thread_count、forum_message_count、news_thread_count、news_message_count 等。当论坛或评论中出现新话题时
UPDATE users_stat
SET forum_thread_count = forum_thread_count + 1
WHERE user_id = current_user_id.
但是问题是可以添加新的section,然后我们需要做alter table with statistics,这样不好。
也有这个想法。创建一个包含字段 user_id、content (varchar 50)、counter 的表 users_stat。当论坛或评论中出现新话题时
UPDATE users_stat
SET counter = counter + 1
WHERE user_id = current_user_id
AND content = 'forum_thread'.
对于第一个topic的情况,当poster的users_stat表中没有记录时,对user_id和content字段做主索引,然后保存统计变为
INSERT INTO users_stat (user_id, content, counter)
VALUES (current_user_id, 'forum_thread', 1 )
ON DUPLICATE KEY UPDATE counter = VALUES (counter + 1).
但事实证明,“插入”只工作一次,然后,每次保存时,mysql 都会分析整个表以搜索重复项。大量使用会降低性能。
谁能提出更多想法?
最佳答案
与您的第 3 种方式类似,但“content”替换为“content_id”,这是一个引用内容表的小整数字段。并制作 (user_id, content_id) 的复合主键 [为了更好的性能,制作一个自动递增 id 和一个唯一的 (user_id, content_id)] 即
contents(id, name): data example: (1, "Forum Thread")
user_stat(user_id int, content_id int, counter int): data example: (3, 1, 5)
插入和更新:
插入 user_stat(user_id, content_id, counter) VALUES ($current_user_id, 1, 1 ) ON DUPLICATE KEY UPDATE counter = VALUES (counter + 1)
关于php - 如何将不同部分的用户统计信息存储在数据库(mysql)中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24006863/