mysql - rails : Joining tables and grouping by count

标签 mysql ruby-on-rails rails-activerecord

我是 Rails 的新手,目前正在研究一个标记系统,我可以在其中为事件分配多个标签,并将相同的标签分配给多个事件。

标签模型如下所示:

has_many :taggings,
has_many :events, through: :taggings

事件模型如下所示:

belongs_to :user
has_many :taggings
has_many :tags, through: :taggings

我有三个这样的表:

TAGS
id | name (string)

EVENTS
id | name (string)

TAGGINGS
id | tag_id | event_id

现在我正在尝试获取前 10 个最常用的标签。我基本上需要将 taggings 和 tags 表连接在一起,并在 taggings 中按 tag_id 分组。像这样:

Tagging.group('tag_id').order('count_id DESC').limit(10).count('id')

但是,通过加入标签,我可以获取名称字段。

最佳答案

试试这个:

Tag.select('tags.*, COUNT(taggings.id) AS tagging_count').
    joins(:taggings).group('tags.id').
    order('tagging_count DESC').
    limit(10).pluck(:name)

关于mysql - rails : Joining tables and grouping by count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27102689/

相关文章:

mysql - MySQL中查询的疑惑

ruby-on-rails - ActiveRecord:清理 `select` 或 `order` 调用中的动态值

ruby-on-rails - 尝试按名字和姓氏搜索

php - 如何显示ORM组装的查询?

ruby-on-rails - 测试目录与 Rspec 一起存在

ruby-on-rails - Carrierwave 在控制台上给出错误

ruby-on-rails - Rails 4 中的 session

mysql - 我的 SQL COUNT 子句出了什么问题

php - Laravel 5.2 队列和作业 - 不推送到作业数据库

mysql - SQL 语法错误..仅显示 3 行而不是 4 行