首页 > 解决方案 > 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)) {
       ...
    }

   

标签: phpmysql

解决方案


你可以做这样的事情

<?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 个变量,但我认为您不应该这样做,因为它更难处理和调试未来的问题


推荐阅读