Codeigniter活动记录联接和循环仅返回一个结果
我正在使用Codeigniter和active record创建一个简单的论坛脚本 我想使用这个函数将所有线程及其各自的回复计数传递回我的控制器 利用下面的脚本,我只得到数组中返回的第一个线程(及其回复数),而不是我的所有线程 为什么会这样?如何修复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
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来获得零回复线程每个线程可以有任意数量的回复。你能澄清一下吗?效果很好-不同之处在于一行一行地分组。你能解释一下为什么需要这样做吗?非常感谢