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

求助:如何实现筛选3天及以上未登录用户的功能?代码无法生效

解决3天及以上未登录用户筛选问题

你的代码存在两处关键问题导致无法正确筛选目标用户,以下是针对性修正方案:

1. SQL查询的语法错误

原SQL中用单引号包裹last_active字段名,MySQL会将其识别为字符串常量而非字段引用,同时日期计算写法可优化为更标准的格式:

// 修正后的SQL查询,新增未活跃天数计算
$findActivity = mysqli_query($conn, "SELECT *, DATEDIFF(CURRENT_TIMESTAMP, last_active) AS inactive_days FROM users WHERE last_active < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)");

这里用DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)精准获取3天前的时间节点,通过DATEDIFF直接计算用户未活跃的天数,方便后续页面展示。

2. 未定义变量的问题

代码里的$inactivefor和$msg未赋值,需从查询结果或自定义逻辑中补充:

while($activeRow = mysqli_fetch_assoc($findActivity)){
    $usr = $activeRow['username'];
    $inactivefor = $activeRow['inactive_days']; // 读取查询返回的未活跃天数
    $msg = "超过3天未登录"; // 自定义状态提示

    echo "<tr class='row100 body'>";
    echo "<td class='cell100 column3'>$usr</td>";
    echo "<td class='cell100 column3'>$inactivefor 天</td>";
    echo "<td class='cell100 column3'>$msg</td>";
    echo "</tr>";
}

额外优化建议

  • 为避免SQL注入风险,建议使用预处理语句:
$stmt = $conn->prepare("SELECT *, DATEDIFF(CURRENT_TIMESTAMP, last_active) AS inactive_days FROM users WHERE last_active < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)");
$stmt->execute();
$result = $stmt->get_result();
while($activeRow = $result->fetch_assoc()){
    // 后续处理逻辑
}
  • 确认last_active字段类型为DATETIME或TIMESTAMP,否则日期计算会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:10:20