票证和账号两种模式。账号有很多票。我正在尝试为每个帐户获取最后创建的票证。
accounts = Account.where(:deleted => false).pluck(:id)
tickets = Ticket.left_outer_joins(:account)
.where(:account_id => accounts)
.order(created_at: :desc)
ticket_ids = Array.new
accounts.each do |account|
ticket = tickets.where(:account_id => account).order(created_at: :desc).limit(1).first
if !ticket.blank?
ticket_ids.push(ticket.id)
end
end
@tickets = tickets.where(:id => ticket_ids).order(created_at: :desc)上面的代码可以工作,并且@tickets包含预期的输出。但问题是上面的代码花费了太多的时间。有没有办法在抓取查询本身中完成所有这些操作?或者,有什么方法可以优化它吗?
我使用的数据库: Mysql
发布于 2020-04-13 14:50:53
我会尝试用子查询来解决这个问题。
ticket_ids = Ticket
.select('MAX(tickets.id)')
.joins(:account)
.where(accounts: { deleted: false })
.group(account_id)
@tickets = Tickets
.where(id: ticket_ids).order(created_at: :desc)发布于 2020-04-13 14:21:52
ticket_ids = Ticket.order(created_at: :desc).group_by(&:account_id).values
@tickets = Ticket.where(id: ticket_ids)https://stackoverflow.com/questions/61182194
复制相似问题