2011-09-16 143 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