2011-07-31 22 views
1

私はCodeigniterとアクティブレコードを使用して簡単なフォーラムスクリプトを作成しています。Codeigniterアクティブレコード結合とループのみ1つの結果を返します

この関数を使用して、すべてのスレッドとそれぞれの応答カウントをマイコンに戻す必要があります。

以下のスクリプトを使用して、すべてのスレッドとは対照的に、配列内で返される最初のスレッド(およびその応答の数)を取得しています。

なぜ、どのように修正できますか?

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

各スレッドに返信がありますか?そうでない場合は、左の結合を使用してください。また、ゼロ返信スレッド – 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行です。 なぜそれが必要なのかを明確にしてください。 多くのありがとう –

関連する問題