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

按月度自定义周期(当月11日至下月11日)查询数据的SQL需求

实现自定义月度周期(当月11日至下月11日)的产品数据查询

嘿,我来帮你搞定这个自定义月度周期的查询需求!咱们一步步来:

第一步:先搞定正确的周期范围计算

你原来的PHP变量只简单拼接了当月11日,但没考虑今天是否在11日之前的情况——比如如果今天是5月10日,那应该查的是4月11日到5月11日的周期,对吧?所以得动态计算周期范围:

// 用DateTime类来处理日期,比直接字符串拼接更可靠
$today = new DateTime();
$periodStart = '';
$periodEnd = '';

// 判断当前日期是否在当月11日及之后
if ((int)$today->format('d') >= 11) {
    // 周期起始:当月11日
    $periodStart = $today->format('Y-m-11');
    // 周期结束:下月11日
    $periodEnd = (clone $today)->modify('+1 month')->format('Y-m-11');
} else {
    // 周期起始:上月11日
    $periodStart = (clone $today)->modify('-1 month')->format('Y-m-11');
    // 周期结束:当月11日
    $periodEnd = $today->format('Y-m-11');
}

这样不管今天是几号,都能自动匹配到对应的11日到11日的周期。

第二步:完善SQL查询,同时修复安全漏洞

你原来的SQL直接把$_POST["employee_id"]拼进去,这可是高危的SQL注入风险!必须改用预处理语句。另外,要添加日期范围的条件——这里假设你用来判断“新增”的日期字段是disbursal_amt表中的da_created_date,如果实际字段名不一样,记得替换成你自己的字段。

完整的代码如下:

// 先执行上面的周期范围计算代码...

// 使用mysqli预处理语句,避免SQL注入
$stmt = $conn->prepare("
    SELECT D.*, c.* 
    FROM disbursal_amt AS D 
    INNER JOIN customer_details AS c ON D.da_cid = c.cid 
    WHERE D.da_bt_id = ? 
    AND D.da_created_date BETWEEN ? AND ?
");

// 绑定参数:三个参数都是字符串类型(s),对应employee_id、起始日期、结束日期
$stmt->bind_param("sss", $_POST["employee_id"], $periodStart, $periodEnd);

// 执行查询
$stmt->execute();

// 获取查询结果
$result = $stmt->get_result();

// 遍历结果处理数据
while ($row = $result->fetch_assoc()) {
    // 这里写你处理每一行数据的逻辑,比如输出或者存入数组
    // echo $row['da_cid'] . ' ' . $row['customer_name'];
}

// 清理资源
$stmt->close();

几个重要的注意点

  • 日期字段替换:一定要把D.da_created_date换成你表中记录“产品新增时间”的实际字段名,比如如果是存在customer_details里的created_at,就改成c.created_at。
  • 预处理语句:永远不要直接拼接用户输入到SQL里,预处理是防范SQL注入的标准做法。
  • 周期边界:如果你的业务里“下月11日”当天的数据是否算入当前周期,需要确认——BETWEEN是包含两端的,如果要排除下月11日当天,可以把结束日期改成$periodEnd . ' 00:00:00',然后用<代替BETWEEN,比如D.da_created_date >= ? AND D.da_created_date < ?。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:42:39