Codeigniter Active Record连接和循环仅返回一个结果

时间:2011-07-31 14:19:58

标签: codeigniter activerecord loops join

我正在使用Codeigniter和活动记录创建一个简单的论坛脚本。

我想使用此函数将所有线程及其各自的回复计数传递回我的控制器。

利用下面的脚本,我只得到一个数组中返回的第一个线程(及其回复数),而不是我的所有线程。

为什么会这样,以及如何解决?

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 个答案:

答案 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)将应用于每个组。 谷歌“由mysql组”获取更多信息