从2个表中提取信息

时间:2011-07-14 14:13:34

标签: php mysql codeigniter

我希望对我的新闻文章页面的嵌套查询提供一些帮助 - 基本上我希望每篇文章都在其下方显示相关的评论,但目前它只会为每篇文章返回一条评论:(

function get_records($limit, $offset, $sort) {
   $this->db->select('news.*, COUNT(comments.news_id) as comments, comments.comment as comment, news.id as id, news.created_on as created_on, CONCAT(users.firstname, " ", users.surname) as author, categories.category as category, news_types.type as news_type', FALSE);
   $this->db->from('news', 'comments');
   $this->db->join('users', 'users.id = news.author', 'left');
   $this->db->join('comments', 'comments.news_id = news.id', 'left');
   $this->db->join('categories', 'categories.id = news.category', 'left');
   $this->db->join('news_types', 'news_types.id = news.news_type', 'left');
   $this->db->group_by('news.id');
   $this->db->order_by('news.id', 'DESC');
   $this->db->limit($limit, $offset);
   $query = $this->db->get();
   if($query->num_rows() > 0) {
      return $query->result_array();
   }
}  

2 个答案:

答案 0 :(得分:3)

 $this->db->group_by('news.id');

GROUP BY每个新闻项目只会返回一条记录,这就是为什么你只收到一条评论。您将需要获取第二个查询以获取所有注释或删除GROUP BY以获取具有冗余新闻项信息的所有注释(这实际上不是一个好主意)。

答案 1 :(得分:2)

这是你想要做的 - 理论上,而不是代码:

你想要制作一大堆新闻故事,数组中的一个项目是匹配评论的另一个数组。

  1. 在一个查询中收集所有新闻报道。
  2. 循环播放您的新闻报道,在循环播放时,运行另一个查询,抓取与新闻报道相符的评论。
  3. 将注释转储到数组中,并将数组作为对象属性附加到result()项目,或者附加到result_array()作为每个数组的新数组项。
  4. 然后从模型中将整个新数组/对象返回给控制器。