使用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
相关产品推荐
相关产品推荐

