2012-02-01 45 views
1

我在我的项目中使用codeigniter 2,我有一个问题,我希望你能帮助我解决它。如何从一个表使用连接获取唯一行?

我有两个MySQL表,“作者‘和’文章”,其中关系为‘一个作家的许多文章’。我需要从'作者''得到作者“,这些作者已经在”“文章中有活跃的文章。

note在文章列表中,我有名为“status_id”的列,如果文章处于活动状态,则设置为1;如果暂停,则设置为0。并且我在“作者”表中记录了一个名为“authors_categories_id”的记录。

我试着用这个代码做

$this->db->select('authors.name,authors.about,authors.author_thumbnail,authors.authors_categories_id,authors.user_id,authors.status_id,authors.id AS auth_id') 
        ->from('authors') 
        ->join('articles', 'authors.id = articles.author_id') 
        ->where('authors.authors_categories_id',$AuthCategory) 
        ->where('articles.status_id', 1) 
        ->order_by("auth_id", "desc") 
        ->limit($limit, $start); 
      $Res = $this->db->get(); 
      $data['Authors'] = array(); 
      foreach($Res->result() as $R) 
      { 
       $data['Authors'][] = $R; 
      } 
      print_r($data['Authors']); 

我的问题是,代码导致我重复的作者。 例如,如果作者在'文章'表中有5篇文章,结果将是同一作者的5条记录,而我只需要查看每位作者不多于

我需要代码根据作者而非文章的数量生成记录。

谢谢。

回答

4

在查询中添加DISTINCT

select('authors.name,authors.about,authors.author_thumbnail,authors.authors_categories_id,authors.user_id,authors.status_id,authors.id AS auth_id') 
       ->from('authors') 
       ->join('articles', 'authors.id = articles.author_id') 
       ->where('authors.authors_categories_id',$AuthCategory) 
       ->where('articles.status_id', 1) 
       ->group_by('authors.name'); 
       ->order_by("auth_id", "desc") 
+0

DISTINCT方式不起作用。但第二种方式是有帮助 – user504363 2012-02-01 17:40:56

1
$this->db->select('authors.name,authors.about,authors.author_thumbnail,authors.authors_categories_id,authors.user_id,authors.status_id,authors.id AS auth_id') 
        ->from('authors') 
        ->join('articles', 'authors.id = articles.author_id') 
        ->where('authors.authors_categories_id',$AuthCategory) 
        ->where('articles.status_id', 1) 
        ->group_by('authors.id') 
        ->order_by("auth_id", "desc") 
        ->limit($limit, $start); 
      $Res = $this->db->get(); 
      $data['Authors'] = array(); 
      foreach($Res->result() as $R) 
      { 
       $data['Authors'][] = $R; 
      } 
      print_r($data['Authors']); 

注意在代码中->group_by('authors.id')现在。这应该将所有相同的作者分组在一起。

+0

谢谢。这很有帮助 – user504363 2012-02-01 17:41:31

相关问题