为了缩短数据库调用,向我建议了一个条件聚合命令,但它没有引用如何使用我正在使用的 Laravel/PHP/Mysql 数据检索方法。
我可能只是理解错误或使用了错误的方法来检索数据,但以下内容在用于提取特定列数据时会产生错误:
foreach($cargodb->get_results(
"
SELECT
terminal,
month,
SUM(CASE WHEN year = YEAR(CURDATE()) THEN tonneCount ELSE 0 END) tonnage_cy,
SUM(CASE WHEN year = YEAR(CURDATE()) - 1 THEN tonneCount ELSE 0 END) tonnage_ly
FROM volumes
WHERE year >= YEAR(CURDATE()) - 1
GROUP BY terminal, month
ORDER BY month desc
"
) as $key => $row) {
$tonnages = $row->tonneCount;
$terminal = $row->terminal;
$year = $row->year;
$month = $row->month;
$cargovolume_cy[] =
'<h4 class="cv-terminal-title">'.$terminal.' </h4>'.
'<div class="cargovolumes_cy">'.
'<div class="cargovolumes_cy-dates cvrow-'.$month.'-'.$year.'">'.
'<span class="cy-month"> '.$month.' </span>'.
'<span class="cy-year"> '.$year.' </span></div>'.
'<div class="cy-year-bar"><div class="cy-tonnage-bar"> </div>'.
'<span class="cy-tonnage" value="'.$tonnages.'"> '.$tonnages.' </span></div>'.
'</div>';
$cargovolume_ly[] =
// '<br />';
'<div class="cargovolumes_ly">'.
'<div class="cargovolumes_ly-dates">'.
'<span class="ly-month"> '.$month.' </span>'.
'<span class="ly-year"> '.$year.' </span></div>'.
'<div class="ly-year-bar"><div class="ly-tonnage-bar"> </div>'.
'<span class="ly-tonnage" value="'.$tonnages.'"> '.$tonnages.' </span></div>'.
'</div>';
};
编辑:很抱歉没有在下面包含错误消息
错误消息表明它无法识别列中可用的 2 个数据项,$tonnages 和 $year
Notice: Undefined property: stdClass::$tonneCount
Notice: Undefined property: stdClass::$year
最佳答案
从查询语句中,
SELECT
terminal,
month,
SUM(CASE WHEN year = YEAR(CURDATE()) THEN tonneCount ELSE 0 END) tonnage_cy,
SUM(CASE WHEN year = YEAR(CURDATE()) - 1 THEN tonneCount ELSE 0 END) tonnage_ly
--...
结果集中的字段是terminal
、month
、tonnage_cy
和tonnage_ly
然而,您正在尝试从未选择的字段中检索值。
鉴于您想要检索每月-每年的吨数总和,我建议将 year
作为选择字段中的组键并简化聚合,如下所示:
SELECT
terminal,
month,
year,
SUM(tonneCount) AS tonneCount
FROM volumes
WHERE year = YEAR(CURDATE()) - 1 OR year = YEAR(CURDATE())
GROUP BY year, terminal, month
ORDER BY month DESC
关于php - 如何从 Laravel MySQL 循环条件聚合中检索关于 $row 数据的 $key?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57830020/