我有一张存储劳动力数据的表格 . 其中一列是特定项目的工作小时数(rthours),另一列是日期(labor_date) .
我需要获取当前每周工作时间的总和,并将它们放入一个数组中,以便与生成条形图的图表脚本一起使用 .
该图表从星期一开始,到星期日结束 .
我写了下面的select语句,但它返回了错误的值,如果其中一天没有记录任何小时数,也没有考虑 .
有什么建议?
这是代码:
$sql = "SELECT SUM(rthours) as total FROM data WHERE (WEEK(labor_date) = WEEK(NOW())) AND (user_name = '$user') GROUP BY DAY(labor_date) ORDER BY DAY(labor_date)";
$result = mysqli_query($conn, $sql);
$thours = array();
while ($row = mysqli_fetch_assoc($result)) {
$thours[] = $row["total"];
}
mysqli_close($conn);
?>
3 回答
编辑过的代码:
代码正在抓取数据,但在某一天数据不存在时仍未放置零 .
首先,您的代码对SQL injection开放 . 我不会在这里解决这个问题,但请修理它 .
您需要使用函数
weekday
(1 - 7),而不是day
(1 - 31),因为后者可能跨越一个月边界然后产生错误的顺序 .为了填补这些空白,您可以在查询中添加一个虚拟表,该表将生成数字1到7,然后将数据外部加入 . 对于缺失的日子,您的金额仍将包含在内,但
null
. 使用coalesce
,您可以将其转换为值0:弄清楚了 . 使用此select语句有效: