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

MySQL PDO嵌套while循环查询每日全量用户数据异常问题咨询

MySQL PDO嵌套循环仅返回每日第一条数据修复方案

问题原因

  • 首个查询分组逻辑存在缺陷:如果fTera是带时分秒的datetime类型,第一个查询GROUP BY的是格式化后的仅日期字符串,但取出的fTera是分组内第一条记录的完整datetime值。第二层查询用该值做精确匹配时,只能匹配到当日相同时分秒的记录,导致仅返回第一条数据。
  • 第二层循环的if($paci != $tPaci)判断逻辑冗余无意义,可直接删除。

修正后代码

// 第一层循环:按日期分组查询当月有效记录
<?php
$sql = $conn->prepare("SELECT count(id) AS total, DATE(fTera) AS fTera_date, DATE_FORMAT(fTera, '%d') AS day, DATE_FORMAT(fTera, '%d %M %Y') AS date
FROM TERA WHERE MONTH(fTera) = MONTH(current_date) AND YEAR(fTera) = YEAR(current_date) AND active != 0
GROUP BY DATE(fTera) ASC");
$sql->execute();
while($row = $sql->fetch(PDO::FETCH_ASSOC)){
    $fT = $row['fTera_date'];
    $paci = $row['total'];
?>
// 第二层循环:查询当日所有有效用户
<?php
    $tera = $conn->prepare("SELECT *
    FROM TERA WHERE DATE(fTera) = :fecha AND active != 0");
    $tera->bindParam(':fecha', $fT, PDO::PARAM_STR);
    $tera->execute();
    while($row1 = $tera->fetch(PDO::FETCH_ASSOC)){
?>
    <tr>
        <td class="center"><?php echo $row1['nombre']; ?></td>
    </tr>
<?php
    } 
?>
// 第二层循环结束
<?php } ?>
// 第一层循环结束

优化建议

如果数据量较大,嵌套查询会产生大量数据库请求,你可以直接单次查询当月所有有效数据,再在PHP层面按日期分组遍历,性能会更好。

内容的提问来源于stack exchange,提问作者Andrés

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:24:02