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

如何按分类与级别统计问题数量?PHP代码输出表格重复行求助

解决表格重复行及数据展示错误问题

你的问题根源在于SQL分组逻辑和表格输出不匹配:当前SQL按level和cat(注意你表字段是cat_name,这里是笔误)分组,会把同一个分类下的不同级别拆成独立行返回,导致表格里同一个分类出现多次(每个级别一行),也就是你看到的重复行。同时你的输出逻辑也没对应表格的列结构,只输出了部分数据。

修正方案

1. 调整SQL查询语句

使用条件聚合,按分类分组,一次性统计每个分类下各等级的问题数及总数:

SELECT
  cat_name,
  COUNT(*) AS total_count,
  SUM(CASE WHEN level = 'easy' THEN 1 ELSE 0 END) AS easy_count,
  SUM(CASE WHEN level = 'middle' THEN 1 ELSE 0 END) AS middle_count,
  SUM(CASE WHEN level = 'difficult' THEN 1 ELSE 0 END) AS difficult_count
FROM
  questions
GROUP BY
  cat_name

这个查询会为每个分类返回一行数据,包含该分类的总题数、各等级题数。

2. 修正PHP输出逻辑

对应表格的列结构,输出每个分类的完整数据:

<table class="table table-striped table-hover">
<thead>
<tr class="table-active table-dark">
<th scope="row">Cat Name</th>
<th>Total questions</th>
<th>easy</th>
<th>middle</th>
<th>difficult</th>
</tr>
</thead>
<tbody>
<?php
if (!$con) {
  die('Could not connect: ' . mysqli_error($con));
}

// 执行修正后的查询
$result = $con->query('SELECT
  cat_name,
  COUNT(*) AS total_count,
  SUM(CASE WHEN level = "easy" THEN 1 ELSE 0 END) AS easy_count,
  SUM(CASE WHEN level = "middle" THEN 1 ELSE 0 END) AS middle_count,
  SUM(CASE WHEN level = "difficult" THEN 1 ELSE 0 END) AS difficult_count
FROM
  questions
GROUP BY
  cat_name');

// 遍历结果输出每行
while ($row = $result->fetch_assoc()) { 
echo "<tr>";
echo "<td>" . htmlspecialchars($row['cat_name']) . "</td>";
echo "<td>" . htmlspecialchars($row['total_count']) . "</td>";
echo "<td>" . htmlspecialchars($row['easy_count']) . "</td>";
echo "<td>" . htmlspecialchars($row['middle_count']) . "</td>";
echo "<td>" . htmlspecialchars($row['difficult_count']) . "</td>";
echo "</tr>";
}
?>
</tbody>
</table>

额外优化点

  • 加入htmlspecialchars()防止XSS攻击,同时避免特殊字符破坏表格结构。
  • 修复了原代码中id=""class的语法错误,去掉了多余的空id属性。
  • 将foreach改为while + fetch_assoc(),这是mysqli遍历结果集更标准的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:54:56