【发布时间】:2020-12-16 06:51:55
【问题描述】:
这就是我的表格的样子(这只是一个示例,我的表格包含大量行):
ID | date | transfer | prov |
--------------------------------------------------------------
1 | 2020-08-21 14:13:14 | 2020-08-31 | 100 |
2 | 2020-08-21 14:13:14 | 2020-08-31 | 200 |
3 | 2020-08-21 14:13:11 | 2020-07-29 | 100 |
4 | 2020-08-20 13:05:59 | 2020-08-29 | 50 |
这是我的代码:
<table>
<thead>
<tr>
<th>Januar</th>
<th>Februar</th>
<th>Mars</th>
<th>April</th>
<th>Mai</th>
<th>Juni</th>
<th>Juli</th>
<th>August</th>
<th>September</th>
<th>Oktober</th>
<th>November</th>
<th>Desember</th>
</tr>
<?php
$res = $link -> query("SELECT SUM(prov) as sum
FROM sales
WHERE YEAR(transfer) = YEAR(CURRENT_DATE())
GROUP BY MONTH(transfer)
ORDER BY MONTH(transfer)");
echo '<tr>';
while( $row = $res->fetch_assoc() ) {
echo "<td>$row[sum]</td>";
}
echo '</tr>';
?>
</thead>
</table>
所以这基本上应该在 8 月返回 250,在 7 月返回 100,在其余月份返回 0。但是当使用这个时,只有单元格 Januar 和 Februar 显示值,而其他单元格不存在。我做错了什么?
这就是现场的样子: https://ibb.co/8bd6JWP(12750 的转移日期是 8 月,而不是 1 月,所以所有单元格的值都应该是 0,但 8 月应该是 12750)
【问题讨论】:
-
“我做错了什么?” - 您期望您的查询神奇地创建结果行,用于首先不存在的数据。您的表只有 具有 八月和七月的数据,因此您将在此处的结果集中仅获得 两条 记录。 (然后,这些数据会出现在一月和二月的列中,因为它们是 HTML 表中的前两列。)
-
@CBroe 那我该怎么做呢?我尝试添加如下检查:
if ($row[sum] == NULL) {,但这给了我错误:Use of undefined constant sum - assumed 'sum'。 -
“GROUP BY MONTH(transfer) 不就是这样做的吗?” - 不。它按月分组您的记录,它有与您选择的列或聚合值无关。