Tags
我的rails 应用程序中有一个列表,这些列表与Posts
使用Taggings
. 在某些观点中,我想展示 5 个最常用标签的列表,以及它们被标记的时间。要创建一个完整的示例,假设一个包含 3 个帖子的表:
POSTS
ID | title
1 | Lorem
2 | Ipsum
3 | Dolor
还有一张有 2 个标签的桌子
TAGS
ID | name
1 | Tag1
2 | Tag2
现在,如果帖子 1 用 Tag1 标记,而帖子 2 用标记 1 和 2 标记,我们的标记表如下所示:
TAGGINGS
tag_id | post_id
1 | 1
1 | 2
2 | 2
那么问题是如何获取所需的信息(最好不要多次返回数据库)以显示以下结果:
Commonly used tags:
tag1 (2 times)
tag2 (1 time)
我已经设法通过包含标签、tag_id
按计数分组和排序来使用 MySQL 做到这一点:
红宝石:
taggings = Tagging.select("*, count(tag_id) AS count").includes(:tag).group(:tag_id).order('count(*) DESC').limit(5)
taggings.each { |t| puts "#{t.tag.name} (#{t.count})" }
但是,我正在将应用程序迁移到 Heroku,因此我需要迁移到 PostgreSQL 9.1。不幸的是,Postgres 的严格性破坏了该查询,因为它要求在子句中指定所有字段。group by
我试过那样做,但结果是我不能再使用t.count
来获取行数了。
所以,最后要回答这个问题:
从 postgres (v9.1) 查询此类信息并将其显示给用户的最佳方法是什么?