如何使用PHP+MySQL统计recordData表中出现次数最多的timeLevelID
问题原因&修正方案
第一次SQL方案错误点&修正
你第一次查询失败的核心原因是SQL语法错误:
- SELECT子句中
timeLevelID与COUNT(timeLevelID)两个返回字段之间缺少逗号分隔,导致数据库解析SQL失败返回false,后续调用fetch_array方法自然抛出错误。 - 额外注意:如果你使用的是PHP的mysqli扩展(当前主流用法),常量应为
MYSQLI_ASSOC,你写的MYSQL_ASSOC是已废弃的mysql扩展的常量,也会导致报错。
修正后的完整代码如下:
require_once "dbConnect.php"; // 补充字段间的逗号,修正SQL语法 $allRecordsDataSQL = "SELECT timeLevelID, COUNT(timeLevelID) AS timeLevelIDFrequency FROM recordData GROUP BY timeLevelID ORDER BY timeLevelIDFrequency DESC"; $allRecordsData = $conn->query($allRecordsDataSQL); // 调试时可保留这行打印SQL错误信息,方便后续排查问题 if ($conn->error) { echo "SQL错误:" . $conn->error; exit; } while($row = $allRecordsData->fetch_array(MYSQLI_ASSOC)){ echo "关卡ID:" . $row["timeLevelID"] . " 游玩次数:" . $row["timeLevelIDFrequency"] . "<br>"; }
第二次PHP计数方案错误原因(可选参考)
第二次方案输出不符合预期是因为你使用了rsort()函数,该函数会重置数组的键名为数字索引,丢失原有关卡ID的关联关系,你需要改用arsort()函数,排序时保留原键名即可得到正确结果。
内容的提问来源于stack exchange,提问作者Ruben Maatman
相关产品推荐
相关产品推荐

