我正在使用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;
}
答案 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组”获取更多信息