我正在使用Codeigniter开发API,在此API中,用户可以标记 自理。我需要显示10个最受欢迎的标签(最常用的标签)。 我怎么能这样做?
更新
标签表包含:
id, user_id, tag, created_at, updated_at
答案 0 :(得分:1)
Jonathan,根据你的设置,解决方案会有所不同,我会建议一些与你的表格结构有点不同的东西,你可以根据需要使用它。
.--------------. .-------------.
| userTags | | tags |
.--------------. .-------------.
| id | | id |
| user_id | | tagName |
| tag_id | .-------------.
.--------------.
要向数据库添加标记: $ data = array('tagName'=>'先生Niceguy'); $ this-> db-> insert('tags'=> $ data);
要向用户添加标记,可以在模型中使用以下内容
$data = array('user_id' => $uId, 'tag_id' => 1);
$this->db->insert('userTags', $data);
收到最常用的标签:
$this->db->select('tag_id');
$this->db->order('tag_id DESC');
$this->db->limit(10);
$this->db->join('tags', 'userTags.tag_id = tags.id');
$this->db->get('userTags');
修改强>
如果您必须使用您的设置,请改为:
$this->db->order_by('count(tag)', 'DESC');
$this->db->group_by('tag', 'DESC');
$tags = $this->db->get('userTags');
foreach($tags->result() as $tag) {
var_dump($tag->tag);
}
答案 1 :(得分:0)
您需要使用order_by()
和group_by()
的组合。按标签名称对它们进行分组,然后按计数对它们进行排序。我不确定你是否可以在ActiveRecord中按计数排序,所以你可能需要使用原始SQL。