如何为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连接后,只有同时满足以下两种情况的记录才会被筛选出来:
last_login在页面传入的起止日期之间last_login在当前时间往前推7天的范围内
如果传入的日期范围和最近7天没有重叠,查询结果会是空的,这完全符合你的双条件筛选需求。
内容的提问来源于stack exchange,提问作者Sid Menon
相关产品推荐
相关产品推荐

