【问题标题】:Reduce sql queries减少sql查询
【发布时间】:2014-01-10 00:23:17
【问题描述】:

我有 3 个实体: 项目、关键字、报告 项目 has_many 关键字 关键字 has_many 项目 项目和报告 has_many 报告

在关键字索引中,我呈现了过去 7 天以及当天所有关键字的部分报告。我在这里遇到的问题是多个查询,我该如何避免这种情况?

<%=render @keywords%>

部分:

<%=keyword.reports.find_today_project_k(Date.today).find_each do |keyword_r|%>
   [<%=keyword_r.pos%>]
<%end%>                  
<%=keyword.reports.find_today_project_k(Date.today - 1.day).find_each do |keyword_r|%>
   [<%=keyword_r.pos%>]
<%end%>
<%=keyword.reports.find_today_project_k(Date.today - 2.day).find_each do |keyword_r|%>
  [<%=keyword_r.pos%>]
<%end%>
<%=keyword.reports.find_today_project_k(Date.today - 3.day).find_each do |keyword_r|%>
  [<%=keyword_r.pos%>]
<%end%>   

控制器:关键字/索引

@keywords = project.keywords.page(params[:page])

谢谢

【问题讨论】:

  • find_today_project_k 长什么样子?
  • 它是一个范围-&gt;(date) { where("DATE(created_at) = ?", date)

标签: ruby-on-rails activerecord


【解决方案1】:

显然,您需要从 3 天前到今天的记录。为什么不在一个查询中添加一个构建此 WHERE 子句的范围?然后,您只需遍历查询结果的关键字以适当地显示它们,而不是触发 4 个查询。

scope :latest, -&gt;(date){ where("DATE(created_at) BETWEEN ? AND ?", date - 3.days, date) }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2015-06-04
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多