2011-07-31 88 views
1

我正在使用Codeigniter和活動記錄創建一個簡單的論壇腳本。Codeigniter Active記錄加入和循環只返回一個結果

我想使用此函數來獲取所有線程及其各自的回覆計數,以傳遞迴我的控制器。

利用下面的腳本,我只獲得了數組中返回的第一個線程(和它的數量),而不是所有的線程。

這是爲什麼,它是如何修復的?

function get_threads($id){ 

    $this->load->database(); 

    $this->db->select('title,ID,COUNT(replies.threadID) as replies'); 
    $this->db->from('threads'); 
    $this->db->join('replies', 'threads.ID = replies.threadID'); 

    $query=$this->db->where('forum', $id); 
    $query=$this->db->get(); 

    $data=$query->result_array(); 

    return $data; 
} 
+1

是否每個線程都有回覆?否則你shuold使用左連接tho也得到零回覆線程 – Dalen

+0

每個線程可以有任何數量的答覆。你能澄清嗎? –

回答

0

,如果你離開加盟線程和回覆你會得到每個線程,即使它沒有回覆,請記住,當您使用聚合函數(COUNT),你需要對行分組:

$this->load->database(); 

$this->db->select('title,ID,COUNT(replies.threadID) as replies'); 
$this->db->from('threads'); 
$this->db->join('replies', 'threads.ID = replies.threadID','left'); 
$this->db->group_by('threads.title, threads.ID'); 
$this->db->where('forum', $id); 

$query = $this->db->get(); 

COUNT將返回0如果沒有答覆發現

簡要說明:

您想知道每個線程的回覆數量,那麼當停止計數並重置計數器時,您需要告訴MYSQL。或者更好的是,你必須告訴MYSQL如何分組數據,聚合函數(這裏是COUNT)將應用於每個組。 Google'group by mysql'獲取更多信息

+0

完美工作 - 區別在於group_by這一行。 你能否澄清爲什麼這是必需的/它做了什麼? 很多謝謝 –