如何使用一个表中的连接获取唯一行?

时间:2012-02-01 16:55:25

标签: php mysql sql codeigniter join

我在我的项目中使用了codeigniter 2,我遇到了一个问题,希望你能帮助我解决它。

我有两个mysql表,“作者”和“文章”,其中关系是“许多文章的一个作者”。我需要让作者“来自'作者'”在“文章”中已经有效的文章。

注意在articles表中,我有一个名为“status_id”的列,如果文章处于活动状态,则设置为1,如果暂停,则设置为0。我在“ authors ”表中有一个名为“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条记录,而我需要查看每位作者一次不再

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

感谢。

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分: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')。这应该将所有相同的作者组合在一起。