我在我的项目中使用了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条记录,而我需要查看每位作者一次不再。
我需要代码根据作者的数量而不是文章来生成记录。
感谢。
答案 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')
。这应该将所有相同的作者组合在一起。