已有当日/当月跨表求和PHP代码,求一周数据跨表求和固定代码
实现一周数据求和的代码方案
下面提供两种常见的一周数据统计场景的代码,同时优化了原代码的安全性与准确性:
场景1:统计最近7天的数据(含当日)
适合需要“近一周”滚动数据的场景,统计从今天往前推7天内的所有记录:
include 'config_connect.php'; // 计算日期范围:今日和7天前的日期 $today = date('Y-m-d'); $sevenDaysAgo = date('Y-m-d', strtotime('-7 days')); // 使用参数化查询,避免SQL注入风险 $sql = "SELECT (SUM(total) - SUM(payout)) AS data FROM paid WHERE bill IN (SELECT bill FROM transactionin) AND paydate BETWEEN ? AND ?"; // 准备并执行查询 $stmt = mysqli_prepare($conn, $sql); mysqli_stmt_bind_param($stmt, "ss", $sevenDaysAgo, $today); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); // 获取结果,若为NULL则默认返回0 $row = mysqli_fetch_assoc($result); $data43 = $row['data'] ?? 0; echo $data43;
场景2:统计自然周的数据(周一至周日)
适合按自然周统计业务数据的场景,可根据需求调整周起始日(比如改为周日):
include 'config_connect.php'; // 计算本周起始和结束日期(此处以周一为周起始,改为'Sunday'则以周日为起始) $weekStart = date('Y-m-d', strtotime('this week Monday')); $weekEnd = date('Y-m-d', strtotime('this week Sunday')); // 参数化查询 $sql = "SELECT (SUM(total) - SUM(payout)) AS data FROM paid WHERE bill IN (SELECT bill FROM transactionin) AND paydate BETWEEN ? AND ?"; $stmt = mysqli_prepare($conn, $sql); mysqli_stmt_bind_param($stmt, "ss", $weekStart, $weekEnd); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $row = mysqli_fetch_assoc($result); $data43 = $row['data'] ?? 0; echo $data43;
注意事项
- 若
paydate字段为DATE/DATETIME类型,使用BETWEEN比原代码的LIKE匹配更准确,不会出现格式匹配错误。 - 参数化查询避免了直接拼接字符串带来的SQL注入风险,更安全可靠。
内容的提问来源于stack exchange,提问作者Hamdan Nuramdani
相关产品推荐
相关产品推荐

