这有点难解释,所以我来解释
这是db表的一个示例
Table - Items
-----------------------
| name | key | value |
-----------------------
| n1 | k1 | 12 |
-----------------------
| n1 | k2 | 32 |
-----------------------
| n1 | k3 | 22 |
-----------------------
| n2 | k1 | 56 |
-----------------------
| n2 | k2 | 34 |
-----------------------
| n2 | k3 | 11 |
-----------------------
数据库表被简化以保持文章简短,我不能改变数据库的设置方式(这会使我的生活更轻松,但我不能)
我需要数据循环显示,如下所示,其中与“键”关联的“值”在表中。
| Name | k1 | k2 | k3 |
---------------------------------
| n1 | 12 | 32 | 22 |
---------------------------------
| n2 | 56 | 34 | 11 |
---------------------------------
我试过的那张桌子
<table id="example" class="display">
<thead>
<tr>
<th>Name</th>
<th>k1</th>
<th>k2</th>
<th>k3</th>
</tr>
</thead>
<tbody>
<% @items.each do |item| %>
<tr>
<td><%= item.name %></td>
<% if item.key == 'k1' %> <td><%= item.value %></td> <% end %>
<% if item.key == 'k2' %> <td><%= item.value %></td> <% end %>
<% if item.key == 'k3' %> <td><%= item.value %></td> <% end %>
</tr>
<% end %>
</tbody>
</table>
但这只在第一个item.value列中运行,k2和k3列为空。
有什么方法或东西可以帮到你吗?我相信有一个更有效和更简单的方法来做这件事,但我找不到或想不起来。
最佳答案
您正在尝试在Items
表上执行轴心操作。尝试使用以下查询。这将以您需要的格式返回数据,使您不必在HTML层中进行复杂的操作。
SELECT name,
SUM(CASE WHEN key = 'k1' THEN value ELSE 0 END) AS k1,
SUM(CASE WHEN key = 'k2' THEN value ELSE 0 END) AS k2,
SUM(CASE WHEN key = 'k3' THEN value ELSE 0 END) AS k3
FROM Items
GROUP BY name
以下是根据您提供的新信息所需的实际查询:
SELECT table_storing_name.name,
SUM(CASE WHEN items.key = 'k1' THEN items.value ELSE 0 END) AS k1,
SUM(CASE WHEN items.key = 'k2' THEN items.value ELSE 0 END) AS k2,
SUM(CASE WHEN items.key = 'k3' THEN items.value ELSE 0 END) AS k3
FROM "table_storing_name" INNER JOIN "items"
ON "items"."table_storing_name_id" = "table_storing_name"."id"
WHERE "table_storing_name"."category_id" = 5
GROUP BY table_storing_name.name