1

例如,如果我在模型中运行一个查询:

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();
   }

好的,这两个功能都在模型中。现在,如何在 list_posts() 中使用 list_users() 的 RESULT。请记住,我需要传递 ID 的数组,并且仅将它用于 list_users() 中的特定 id,它也返回 ARRAY

我知道我可以使用连接查询,但这根本不是重点,因为我有很多查询需要拆分

4

1 回答 1

5

为什么不使用 JOIN 语句,并将两个查询合二为一?

这将减少数据库负载,减少查询时间,并减少模型中的混乱。

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

您也可以使用活动记录来执行此操作。这将避免对 SQL 使用完整的查询,以及更多的 CI 方法。

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,因为它们对数据库的负担较小。

//controller

function test(){
  $users = $this->exampleModel->list_users();
  //manipulate user data if needed
  $posts = $this->exampleModel->list_posts($users);
}
于 2012-04-17T15:04:22.253 回答