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

使用PHP mysqli统计3列多值出现次数并按降序排列的实现问题

实现方案

逻辑说明

你现有代码仅统计了work表的总行数,无法实现跨三列的词频统计。正确逻辑是先用UNION ALL把name1、name2、name3三列的所有值合并为同一个单列数据集,再分组统计每个值的出现次数,最后按次数降序排序即可。

调整后代码

<?php
// 构造统计SQL
$statSql = "
SELECT name, COUNT(*) AS count
FROM (
    SELECT name1 AS name FROM work
    UNION ALL
    SELECT name2 AS name FROM work
    UNION ALL
    SELECT name3 AS name FROM work
) AS all_name_values
GROUP BY name
ORDER BY count DESC
";

// 执行查询
$res = $con->query($statSql);
if ($res) {
    // 遍历输出结果
    while ($row = $res->fetch_object()) {
        echo "{$row->name} {$row->count}\n";
    }
    $res->free();
} else {
    // 调试时可打开下方注释看错误信息
    // echo "查询失败:" . $con->error;
}
?>

可选优化(适配示例大小写输出)

如果你需要忽略名字大小写统计(比如把Mary和mary视为同一个值),可以将SQL的分组逻辑修改为:

GROUP BY LOWER(name)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:07