我正在开发社区,我想在用户个人资料中显示很多用户统计信息。
最佳做法是什么?。
我现在有这个,但我不认为这是最好的方式,所以我会很高兴你可以解释我在我的查询中加载大量统计数据可以做些什么:
//Get the stats of a user in hes profile
function getState($username) {
//it has false so it dont try to escape the COUNT()
$this->db->select('username, firstname, lastname, freetext, imgPath, city, hood, online, level,
COUNT(forumThread.id) as totalThreads,
COUNT(forumComments.id) as totalComments
', FALSE);
$this->db->join('forumThread', 'forumThread.creater = users.username');
$this->db->join('forumComments');
$this->db->group_by('users.id');
$this->db->where('username', $username);
$statQuery = $this->db->get('users');
return $statQuery->row();
}
答案 0 :(得分:1)
每次开始加入表时,都会冒着使查询速度变慢的风险(随着表的增长)。
一个选项是缓存结果,这样您就不必在每次加载页面时都运行查询。 (我认为CI确实为您提供了查询缓存功能)
另一种选择是在users表中有另一个字段,其中包含论坛帖子的数量和他们所做的论坛评论的数量。将新条目插入数据库时,也会增加此计数器。因此,当您在统计信息页面中加载所需的数据时,您只需查询1表。
第二个选项确实给你一个稍大的开销,当你输入其他数据时运行另一个查询,并在你删除一个时减少。和/或创建维护脚本,确保users表中的值实际上是准确的(并在后台定期运行)。
无论如何,我觉得我现在只是在闲聊。如果有意义,我希望有一些!