gpt4 book ai didi

php - 拆分 MySQL 结果数组以输出总和和类别标题

转载 作者:行者123 更新时间:2023-11-30 23:34:31 24 4
gpt4 key购买 nike

我的 MySQL 数据库中有一个库存表,它是我用来跟踪我公司存储的项目的应用程序的一部分。

我目前正在处理应用程序的计费端,我允许通过 PHPExcel 导出 Excel 报告。 “项目”表中的项目具有公司 ID 和类别 ID。这些类别是组织公司的子项。

对于我的 Excel 导出,我一次只与一家公司合作,所以我的 SQL 查询将我的项目表连接到我的类别表,所以我有名称可以使用。

我的所有这些工作都很好,但我试图保留每个类别的每月总费用并保留每个部分的标题。因此,我希望导出的数据库数据按类别分成 block 。

我的 Codeigniter 模型中的当前 SQL 语句:

    function get_inventory_fees($where = array())
{
// Function that returns object of items table with area calculation and charge calculations grouped by items
$this->db->select('i.bbn bbn, i.name item_name, c.name cat_name, i.date_recd date_received, SUM(i.length * i.width * i.height * i.qty) area, i.location location, r.rate, SUM(i.length * i.width * i.height * i.qty * r.rate) fee');
$this->db->join('rates r', 'r.name = i.location');
$this->db->join('categories c', 'c.id = i.cat');
$this->db->where('shipped IS NULL', null, false);
$this->db->group_by('i.id');
$this->db->order_by('cat_name asc, location asc');
$query = $this->db->get_where('items i', $where);
return $query;
}

我的循环代码:

    $category_total = 0;
$category_name = '';
foreach($this->inventory->result() as $data)
{
if($data->cat_name != $category_name)
{
if($category_total > 0)
{
$row++;
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(6, $row, 'Total:');
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(7, $row, $category_total);
$row++;
$category_total=0;
}
$row++;
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $row, $data->cat_name);
$category_name = $data->cat_name;
$row++;
}
$col = 0;
foreach ($fields as $field)
{
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $data->$field);
$col++;
}
$category_total+=$data->fee;

$row++;
}

我正在努力避免嵌套查询,因为我在以前的应用程序版本中就是这样做的。它会变得非常慢,但它确实有效。这一次,我正在使用 Codeigniter 重新设计一些东西,希望能获得更多经验。

然而,我当前代码的问题是,我没有得到上一个类别的总计,因为没有下一个类别可以与之比较。不幸的是,我没有足够的咖啡因从这里弄清楚。有什么想法或更好的解决方案吗?

最佳答案

我没有使用过 code igniter,所以我只会指出我在某些情况下使用的可能解决方案,但您必须找到一种方法来集成它。

您也许可以在您的分组依据中使用 WITH ROLLUP。 WITH ROLLUP 为每个分组添加 NULL LINES 和总和,因此您可能会对这个解决方案感兴趣,但我不完全确定。

http://dev.mysql.com/doc/refman/5.0/fr/group-by-modifiers.html

Example|data
------------
1 |1
2 |1
3 |2
4 |2
5 |2

SELECT SUM(example) as sum_example, data FROM mydata GROUP BY data WITH ROLLUP

sum_example|data
----------------
3 |1
12 |2
15 |NULL

祝你好运

关于php - 拆分 MySQL 结果数组以输出总和和类别标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8730036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com