У меня есть таблица инвентаризации в моей базе данных MySQL как часть приложения, которое я использую для отслеживания предметов, которые хранит моя компания.
В настоящее время я работаю над окончанием приложения для выставления счетов, в котором я разрешаю экспортировать отчет Excel через PHPExcel.Элементы в таблице «items» имеют идентификатор компании и идентификатор категории.Категории являются детьми компаний для организации.
Для экспорта в Excel я буду работать только с одной компанией за раз, поэтому мой SQL-запрос соединяет мою таблицу элементов с моей таблицей категорий, поэтому у меня есть имена для работы.
У меня все это отлично работает, но я пытаюсь сохранить промежуточные суммы ежемесячных сборов по категориям и сохранить название для каждого раздела.Поэтому я хочу, чтобы экспортированные данные базы данных были разбиты на куски по категориям.
Мой текущий оператор SQL в моей модели Codeigniter:
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 и, надеюсь, немного больше опыта.
Однако моя проблема с моим текущим кодом заключается в том, что я не получаю итоговую сумму в моей последней категории, поскольку следующей категории нетсравнить это с.К сожалению, мне не хватает кофеина, чтобы понять это отсюда.Есть идеи или лучшие решения?