【发布时间】:2015-09-02 02:15:15
【问题描述】:
我正在查看多个数组,但无法根据年份在表格中对齐它们。目前数据与相应年份不一致,如果任何年份都存在数据,则只需将数据放在第一行,然后将“0”数据放在其余部分,即。与年份不一致。
查看
<table>
<% @a.zip(@b, @c, @d) do |a, b, c, d| %>
<tr>
<td><%= a.year %></td>
<% if a.blank? %>
<td>0</td>
<td>0</td>
<% else %>
<td><%= a.id %></td>
<td><%= a.data %></td>
<% end %>
<% if b.blank? %>
<td>0</td>
<td>0</td>
<% else %>
<td><%= b.id %></td>
<td><%= b.data %></td>
<% end %>
<% if c.blank? %>
<td>0</td>
<td>0</td>
<% else %>
<td><%= c.id %></td>
<td><%= c.data %></td>
<% end %>
<% if d.blank? %>
<td>0</td>
<td>0</td>
<% else %>
<td><%= d.id %></td>
<td><%= d.data %></td>
<% end %>
</tr>
</table>
控制器
@a = Result.where(id: params[:id_select]).group('year').where('data > 0').select('AVG(data) AS data, year as year, COUNT(id) AS id').order('year ASC')
@b = Result.where(id: params[:id_select]).group('year').where('data > 0').select('AVG(data) AS data, year as year, COUNT(id) AS id').where('id = ?', '0').order('year ASC')
@c = Result.where(id: params[:id_select]).group('year').where('data > 0').select('AVG(data) AS data, year as year, COUNT(id) AS id').where('id = ?', '1').order('year ASC')
@d = Result.where(id: params[:id_select]).group('year').where('data > 0').select('AVG(data) AS data, year as year, COUNT(id) AS id').where('id = ?', '2').order('year ASC')
【问题讨论】:
-
请在表格中提及您想要的数据格式和输出格式。
-
我在获取问题想要的内容时遇到了一些麻烦,您能否写下您明确不是查询的数据以及您想要的文本格式。
-
@DollarChills,我在下面为您的问题提出了解决方案。我希望我做对了。让我知道它是否适合您的需求。
-
您是否尝试在 SQL 中获取所有结果(无论年份是什么),然后执行
results.group_by(&:year)?它将结果分组到一个散列中,其中键是年份,值是包含今年匹配的每个结果的数组。
标签: mysql ruby-on-rails ruby-on-rails-3.2