我是 codeigniter 和 php 的新手。我的DB 中有两个表,我需要做的是从表user_details、user_comments 中检索数据。
user_details 的id 与 user_comments 中的 id_user 相同。
我想在我的 View 中显示一些输出,因为没有条件,我需要所有用户列表,其中包含 first_name,last_name from user_details 和 number of comment by user from 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;
}
我需要帮助请帮助我...
最佳答案
您不想运行 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 |
Here is a SQLFiddle demo
Recommended reading:
In Codeigniter this translates to something along the lines of
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;
}
关于php - 如何从 codeigniter 中的三个表中检索数据以获得完整 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29722641/