显示最常用的10个标签

时间:2011-08-30 09:20:35

标签: codeigniter

我正在使用Codeigniter开发API,在此API中,用户可以标记 自理。我需要显示10个最受欢迎的标签(最常用的标签)。 我怎么能这样做?

更新

标签表包含:

id, user_id, tag, created_at, updated_at

2 个答案:

答案 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。