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

如何为MySQL查询的last_login字段添加双条件日期范围筛选

整合双日期条件到SQL查询的方案

没问题,我来帮你把这两个日期条件完美整合到现有查询里~

首先,你的需求是让last_login同时满足两个条件:一是处于页面传入的日期范围内,二是在最近7天内(也就是between adddate(now(),-7) and now())。我们只需要把这两个条件用AND连接,加到WHERE子句里就行。

完整的SQL语句示例

假设从页面传入的日期范围是起始日期和结束日期(比如前端传的start_date和end_date),完整查询如下:

SELECT users.first_name 
FROM users 
INNER JOIN agencies ON users.agency_id=agencies.id 
WHERE 
  -- 条件1:匹配页面传入的日期范围
  users.last_login BETWEEN :start_date AND :end_date 
  -- 条件2:匹配最近7天的登录记录
  AND users.last_login BETWEEN ADDDATE(NOW(), -7) AND NOW();

重要提醒:避免SQL注入

直接把变量拼进SQL里会有严重的SQL注入风险,所以一定要用预处理语句。这里给你一个PHP PDO的实现示例:

// 假设你已经建立了PDO数据库连接$pdo
$start_date = $_REQUEST['start_date']; // 从页面获取的起始日期
$end_date = $_REQUEST['end_date'];     // 从页面获取的结束日期

// 预处理SQL
$sql = "SELECT users.first_name 
        FROM users 
        INNER JOIN agencies ON users.agency_id=agencies.id 
        WHERE users.last_login BETWEEN ? AND ? 
          AND users.last_login BETWEEN ADDDATE(NOW(), -7) AND NOW()";

$stmt = $pdo->prepare($sql);
// 绑定参数并执行查询
$stmt->execute([$start_date, $end_date]);
// 获取查询结果
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

逻辑说明

两个BETWEEN条件用AND连接后,只有同时满足以下两种情况的记录才会被筛选出来:

  1. last_login在页面传入的起止日期之间
  2. last_login在当前时间往前推7天的范围内

如果传入的日期范围和最近7天没有重叠,查询结果会是空的,这完全符合你的双条件筛选需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:17:26