我是codeigniter和php的新手。我的数据库中有两个表我需要做的是我想要从表 user_details,user_comments 中检索数据。
user_details的id 与user_comments中的 id_user 相同。
我希望在我的视图上显示一些输出,因为没有条件,我需要所有用户列表 first_name,last_name from user_details 和用户的评论数量来自comm_id 。
public function user_details(){
$query=$this->db->select('id, f_name, l_name')
->from('user_details');
$array=array();
foreach($query->result() as $row)
{
$id=$row->id;
$array['f_name']=$row->f_name;
$array['l_name']=$row->l_name;
$query1=$this->db->select('comments')
->from('user_comments')
->where('id_user',$id);
foreach($query1->result() as $row1){
$array['comments'] = COUNT($row->comments;
}
}
return $array;
}
我需要帮助,请帮助我......
答案 0 :(得分:2)
您不想运行N + 1个查询。您可以使用查询一次性获取所有必要的数据
SELECT u.id, u.f_name, u.l_name, COUNT(c.id_user) comments_count
FROM user_details u LEFT JOIN user_comments c
ON u.id = c.id_user
GROUP BY u.id, u.f_name, u.l_name
示例输出:
| id | f_name | l_name | comments_count | |----|--------|--------|----------------| | 1 | John | Doe | 4 | | 2 | Jane | Doe | 2 |
这是 SQLFiddle 演示
推荐阅读:
在Codeigniter中,这转换为
的内容public function user_details()
{
$rows = $this->db
->select('u.id', 'u.f_name', 'u.l_name')
->select('COUNT(c.id_user) AS comments_count', FALSE)
->from('user_details AS u')
->join('user_comments AS c', 'u.id = c.id_user', 'left')
->group_by('u.id', 'u.f_name', 'u.l_name')
->get()
->result_array();
return $rows;
}