Я разрабатываю API с помощью Codeigniter, и в этом API пользователи могут отмечать себя. Мне нужно отобразить 10 самых популярных тегов (наиболее часто используемых тегов). Как я могу это сделать?

Обновить

Таблица тегов содержит:

id, user_id, tag, created_at, updated_at
-2
Jonathan Clark 30 Авг 2011 в 13:20

2 ответа

Лучший ответ

Джонатан, в зависимости от вашей настройки решение будет отличаться, я собираюсь предложить что-то немного отличное от того, как выглядит ваша структура таблицы, вы можете использовать это, если хотите.

.--------------.    .-------------.
|   userTags   |    |     tags    |
.--------------.    .-------------.
|  id          |    | id          |
|  user_id     |    | tagName     |
|  tag_id      |    .-------------.
.--------------.

Чтобы добавить тег в вашу базу данных: $ data = array ('tagName' => 'Mr. Niceguy'); $ this-> db-> insert ('теги' => $ 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
Tobias 30 Авг 2011 в 15:19

Вам нужно будет использовать комбинацию order_by() и group_by(). Сгруппируйте их по имени тега, а затем отсортируйте их по количеству. Я не уверен, что вы можете упорядочить по счетчику в ActiveRecord, поэтому вам может потребоваться использовать необработанный SQL.

0
Chris Schmitz 30 Авг 2011 в 13:58