Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codeigniter活动记录联接和循环仅返回一个结果_Codeigniter_Activerecord_Loops_Join - Fatal编程技术网

Codeigniter活动记录联接和循环仅返回一个结果

Codeigniter活动记录联接和循环仅返回一个结果,codeigniter,activerecord,loops,join,Codeigniter,Activerecord,Loops,Join,我正在使用Codeigniter和active record创建一个简单的论坛脚本 我想使用这个函数将所有线程及其各自的回复计数传递回我的控制器 利用下面的脚本,我只得到数组中返回的第一个线程(及其回复数),而不是我的所有线程 为什么会这样?如何修复 function get_threads($id){ $this->load->database(); $this->db->select('title,ID,COUNT(replies.threadID

我正在使用Codeigniter和active record创建一个简单的论坛脚本

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

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

为什么会这样?如何修复

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;
}

如果离开“加入线程”和“回复”,则即使每个线程没有回复,也会得到每个线程。请记住,在使用聚合函数(
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'GroupbyMySQL'获取更多信息

每个线程都有回复吗?否则,您将使用left join来获得零回复线程每个线程可以有任意数量的回复。你能澄清一下吗?效果很好-不同之处在于一行一行地分组。你能解释一下为什么需要这样做吗?非常感谢