如何从codeigniter中的三个表中检索数据以获得完整视图

时间:2015-04-18 20:44:37

标签: php mysql codeigniter

我是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;


    }

我需要帮助,请帮助我......

1 个答案:

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