2011-09-16 100 views
0

我正在开发一个社区,我想在用户配置文件中显示很多用户统计信息。Codeigniter显示用户的统计信息

最佳做法是什么?

我现在有这个,但我不认为它做的最好的办法,所以我会很高兴的,你可以给我解释一下我能做些什么来加载大量的统计资料在我的查询:

//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

您不必将select中的第二个参数设置为false,因为Codeigniter不会转义函数。实际上,源代码首先使用逗号作为分隔符来分割字符串。然后它会遍历这个数组,并且如果它们不在那里,就会向每个项目添加反引号,因为每个项目都被假定为一个字段,但是如果在任何地方找到了括号,它就会保持项目原样。 –

回答

1

任何时候当你开始连接表时,你都会冒着让查询非常慢(随着表增长)的风险。

一种选择是缓存结果,以便您不必在每次加载页面时都运行查询。 (我认为CI确实会给你查询缓存的能力)

另一种选择是在users表中有另外一个字段,它有论坛线程的数量和论坛的评论数量。当您向数据库中插入新条目时,也会增加此计数器。所以当你在统计页面加载你需要的数据时,你只需要查询1个表格。

第二个选项确实给你一个稍大的开销,当你输入其他数据时运行另一个查询,当你删除一个时减少。和/或创建维护脚本,以确保users表中的值实际上是准确的(并在后台定期运行)。

无论如何,我觉得我现在只是漫不经心。我希望有一些,如果这是有道理的!

+0

散乱+1 – Brad