2011-07-14 19 views
1

私のニュース記事ページのネストされたクエリについてはお役に立ちたいと思います - 基本的には各記事に関連するコメントを下に表示したいと思いますが、現時点では記事ごとに1つのコメントしか返しません:(2つのテーブルから情報を引き出す

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

答えて

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

GROUP BYは、あなたが唯一のコメントを取得する理由です、あなたにニュース項目ごとに1つのレコードのみを返します。あなたが取得するGROUP BYを2番目のクエリは、すべてのコメントを取得しているか、削除する必要があります冗長なニュースアイテム情報を持つすべてのコメント(本当に良いアイデアはありません)

2

あなたがしたいことは、理論上はコードではなく、

となります。配列内の1つの項目が一致するコメントの別の配列であるというニュース記事の大きな配列を作りたいと思うでしょう。

  1. すべてのニュース記事を1つのクエリで収集します。
  2. ニュース記事をループし、ループしている間にニュース記事と一致するコメントを取得する別のクエリを実行します。
  3. コメントを配列にダンプし、オブジェクトプロパティとしてresult()アイテムに配列をアタッチするか、それぞれの新しい配列アイテムとしてresult_array()にアタッチします。

次に、新しいアレイ/オブジェクト全体をモデルからコントローラに戻します。

;)

関連する問題