You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP结合MySQL统计unit表各列'N'/'I'/'ETP'值出现次数的方法

单条MySQL查询配合PHP实现多列枚举值统计方案

方案1:使用MySQL聚合函数(性能最优)

直接通过聚合查询一次性算出所有列的三个枚举值出现次数,仅返回1行统计结果,无需遍历全表数据,适合数据量较大的场景。

编写单条统计SQL

SELECT
  -- gcc_1_1 列统计
  COUNT(CASE WHEN gcc_1_1 = 'N' THEN 1 END) AS gcc_1_1_n,
  COUNT(CASE WHEN gcc_1_1 = 'I' THEN 1 END) AS gcc_1_1_i,
  COUNT(CASE WHEN gcc_1_1 = 'ETP' THEN 1 END) AS gcc_1_1_etp,
  -- gcc_1_2 列统计
  COUNT(CASE WHEN gcc_1_2 = 'N' THEN 1 END) AS gcc_1_2_n,
  COUNT(CASE WHEN gcc_1_2 = 'I' THEN 1 END) AS gcc_1_2_i,
  COUNT(CASE WHEN gcc_1_2 = 'ETP' THEN 1 END) AS gcc_1_2_etp,
  -- gcc_1_3 列统计,剩余15个列按照相同规则补全即可
  COUNT(CASE WHEN gcc_1_3 = 'N' THEN 1 END) AS gcc_1_3_n,
  COUNT(CASE WHEN gcc_1_3 = 'I' THEN 1 END) AS gcc_1_3_i,
  COUNT(CASE WHEN gcc_1_3 = 'ETP' THEN 1 END) AS gcc_1_3_etp
FROM unit

PHP处理结果生成对应变量

// 填入上面补全所有18列的完整SQL
$query = "上述完整统计SQL语句";
$result = $connection->query($query);
$statData = mysqli_fetch_assoc($result);

// 批量生成要求格式的变量,生成后可直接调用 $gcc_1_1_n、$gcc_1_1_i 等变量
extract($statData);

方案2:兼容原有全表遍历逻辑

如果需要保留原有SELECT *的全表遍历逻辑(比如同时需要处理行级其他业务),可使用以下实现:

// 补全所有18个列名到数组中
$allColumns = ['gcc_1_1', 'gcc_1_2', 'gcc_1_3'];
// 初始化所有统计变量为0
foreach ($allColumns as $colName) {
    ${$colName . '_n'} = 0;
    ${$colName . '_i'} = 0;
    ${$colName . '_etp'} = 0;
}

$query = "SELECT * FROM unit";
$result = $connection->query( $query );
while ($row = mysqli_fetch_array($result)) {
    foreach ($allColumns as $colName) {
        $currentVal = strtolower($row[$colName]);
        ${$colName . '_' . $currentVal}++;
    }
}
  • 方案1的性能远高于方案2,无特殊需求优先选择方案1
  • 两种方案最终生成的变量名完全匹配需求的命名规则

内容的提问来源于stack exchange,提问作者IlludiumPu36

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:06:07