例如,如果我在模型中运行一个查询:
public function list_users() {
$q = "SELECT user_id, username FROM users";
return $q->result_array();
}
现在,要列出该用户的帖子,我需要在此函数中引用它的id:
public function list_posts() {
$q = "SELECT post_id, post_title, post_content FROM posts
WHERE user_id = what??";
return $q->result_array();
}
确定这两个功能都在Model中。现在,如何在list_posts()中使用list_users()中的RESULT。请记住,我需要传递ARRAY的ID,并且仅用于list_users()的特定id,它也会返回ARRAY
我知道我可以使用连接查询,但这根本不是重点,因为我有很多需要拆分的查询
答案 0 :(得分:5)
这将减少数据库负载,减少查询时间,并减少模型中的混乱。
SELECT p.post_id, p.post_title, p.post_content, u.user_id, u.username FROM posts p LEFT JOIN users u ON u.user_id = p.user_id
您也可以使用有效记录来执行此操作。这将避免必须使用完整的查询,以及更多的CI SQL方法。
http://codeigniter.com/user_guide/database/active_record.html
$this->db->select('p.post_id, p.post_title, p.post_content, u.user_id, u.username');
$this->db->from('posts p');
$this->db->join('users u', 'u.user_id = p.user_id');
$q = $this->db->get();
$q->result();
修改强>
您可以将值作为对象返回.. IE:$this->user_id
然后在posts函数中引用它。理想情况下,您应该调用Controller中的第一个函数return $user_id
,然后在下一个函数中引用它。 这绝对不是最好的情况,但是你应该使用JOIN,因为它们不那么重要db。
//controller
function test(){
$users = $this->exampleModel->list_users();
//manipulate user data if needed
$posts = $this->exampleModel->list_posts($users);
}