2012-02-01 62 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

相關問題