mysql - 如何转换此 group_by 语句,使其在 DB 而不是 Ruby 上工作?

标签 mysql sql ruby-on-rails ruby postgresql

我正在为一个网站构建年度存档,并且它可以正常工作,但我正在使用 group_by。这个特定的网站最终将有数千个帖子,我想将分组移动到数据库,但我不太确定如何将其转换为事件记录查询。

我正在使用 Active Record 和 Rails 4,这是我目前所拥有的:

在 Controller 中:

@posts_by_year = @posts.group_by { |post| post.published_at.year }

在 View 中:

  <% @posts_by_year.each do |year, post| %>
    <li><%= "#{year} - #{pluralize post.count, 'post'}" %></li>
  <% end %> 

生成一个如下所示的列表:

2013 (5 posts)
2012 (2 posts)
2010 (1 post)

我如何复制这个确切的功能,但让数据库进行分组,如果您预计每年有 2,000-3,000 个帖子,您认为值得进行切换吗?最后,如果我使用 mysql 或 postgres,事件记录的实现会有所不同吗?

最佳答案

在 Controller 中(从标签中假设您正在使用 mysql)

@posts_by_year = @posts.select("YEAR(published_at) AS year, COUNT(id) AS counter").group("YEAR(published_at)")

在 View 中

<% @posts_by_year.each do |post| %>
  <li><%= "#{post.year} - #{pluralize post.counter, 'post'}" %></li>
<% end %>

关于mysql - 如何转换此 group_by 语句,使其在 DB 而不是 Ruby 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945287/

相关文章:

sql - 在存储过程中传递动态订单

ruby-on-rails - 社交图标的 DRY 代码

php - WHERE 子句日期大于 24 小时 - Carbon/Laravel

mysql - Mysql2、RoR 和 Windows 8 x64 的问题

mysql - 新 sql 表中不需要的主键

php - SQL打印表不起作用

ruby-on-rails - 在一个声明中使用 ActiveRecord 序列化多个属性?

ruby-on-rails - rails : form_for routes won't display a good form

php - 多级登录不进入指定菜单

php - 在数据库中搜索 Mysql PHP