php - MySQL/PHP - 计算列中的特定值
问题描述
在一个表中unit
,我有 18 列,每列可以包含三个不同值之一。可能的值为“N”、“I”或“ETP”。
其中三列是:
|------------|-------------|------------|
|gcc_1_1 |gcc_1_2 |gcc_1_3 |
|------------|-------------|------------|
我想为每列返回这三个值中的每一个的计数以放入它们自己的变量中,例如以下变量将用于第一列和三个可能的值。
$gcc_1_1_n
$gcc_1_1_i
$gcc_1_1_etp
使用一个 MySQL 查询在 PHP 中实现这一目标的最简单方法是什么?
$query = "SELECT * FROM unit";
$result = $connection->query( $query );
while ($row = mysqli_fetch_array($result)) {
...
}
解决方案
你可以做这样的事情
<?php
$data = [...]; //array of data in the form of [['gcc_1_1' => 'n',... ], ...]
$groupedData = array_reduce(
$data,
function(array $res, array $row){
foreach($row as $column => $value) {
$key = $column.'_'.$value;
$existing = $res[$key] || 0;
$res[$key] = $existing + 1;
}
return $res;
},
[]
);
现在在您的 $groupedData 中,您有一个包含与您的请求匹配的键的数组。您可以使用 extract() 创建 n 个变量,但我认为您不应该这样做,因为它更难处理和调试未来的问题
推荐阅读
- html - 谷歌图表中的指数/对数趋势线
- c++ - 从指针类属性访问对象属性的问题
- python - pandas.DataFrame.dtypes 返回的所有可能数据类型的列表
- java - 屏幕旋转后未保存 RecyclerView 位置
- c++ - 如何正确地将二维 int 数组传递给 C++ 中的函数?
- office-js - 如何在任务窗格加载项中使用 Office.StartupBehavior.load?
- spring-boot - 使用 Quartz 和 Spring boot 安排任务
- c++ - Nlohmann::json& 作为函数参数,而不在标头中包含 json.hpp
- audio - 编解码器或比特率或采样?对于最佳音质,哪个最重要?
- python - 如何在django中查询反向多对多