php - 如何从 Laravel MySQL 循环条件聚合中检索关于 $row 数据的 $key?

标签 php mysql laravel

为了缩短数据库调用,向我建议了一个条件聚合命令,但它没有引用如何使用我正在使用的 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">&nbsp;</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">&nbsp;</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
--...

结果集中的字段是terminalmonthtonnage_cytonnage_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/

相关文章:

caching - 如何禁用 Laravel View 缓存?

PHP 在同一页面上发布

javascript - Php fread() 函数不返回任何内容

php - 阻止用户多次发帖

php - 尝试注册示例用户时出现 pdo 注册页面错误

mysql - 非聚集索引与聚集索引

php - 为什么登录时mysql查询不匹配?

php - onmouseover 获取引用 mysql 表的列表项的 id,并用表行填充新列表

php - laravel 4 artisan -- 如何回滚到特定的迁移状态?

php - Laravel 4 Controller 中的依赖注入(inject)实例所有对象