Проблема с foreach

Я реализую доклад, где я печатаю лекарства, обеспеченные пациентов конечно период времени, это остается так.

introducir la descripción de la imagen aquí

Я хочу, чтобы, если есть равные даты, Вы сложили дозы, общая сумма, concatene цену за единицу товара и счета оставаясь таким

introducir la descripción de la imagen aquí

Кодекс этот

    $suma=0; 
    $totales=0;
    $i = 9;
    $fecha1="";
    $precio = 0;
  foreach($reporte as $row):
    if ($fecha1 != $row['fecha'] ) {
    $precio = $row['Totalprecio'];
    $dosis = $row['dosis'];
    $factura=$row['noFactura'];
  }else {
    $precio = $precio + $row['Totalprecio'];
    $dosis = $dosis + $row['dosis'];
    $factura=$row['noFactura'].','.$factura;
  }
    $totales = $precio;
    $suma=$suma + $precio;
    
      if ($fecha1 != $row['fecha'] ) {
        $precio = $row['Totalprecio'];
        $dosis = $row['dosis'];
        
        $objPHPExcel->getActiveSheet()->setCellValue('A'.$i, $row['fecha']);
        $objPHPExcel->getActiveSheet()->setCellValue('B'.$i, round($row['peso'],2)." KG");
        $objPHPExcel->getActiveSheet()->setCellValue('C'.$i, $row['Medicamento']);
        $objPHPExcel->getActiveSheet()->setCellValue('D'.$i, $dosis);
        $objPHPExcel->getActiveSheet()->setCellValue('E'.$i, $row['precio']);
        $objPHPExcel->getActiveSheet()->setCellValue('F'.$i, 'Monto: $'.round($totales,2). ' 
}

    $objPHPExcel->getActiveSheet()->getStyle('A'.$i)->applyFromArray($bordear)->getAlignment()->setWrapText(true);
    $objPHPExcel->getActiveSheet()->getStyle('B'.$i)->applyFromArray($bordear)->getAlignment()->setWrapText(true);
    $objPHPExcel->getActiveSheet()->getStyle('C'.$i)->applyFromArray($bordear)->getAlignment()->setWrapText(true);
    $objPHPExcel->getActiveSheet()->getStyle('D'.$i)->applyFromArray($bordear)->getAlignment()->setWrapText(true);
    $objPHPExcel->getActiveSheet()->getStyle('E'.$i)->applyFromArray($bordear)->getAlignment()->setWrapText(true);
    $objPHPExcel->getActiveSheet()->getStyle('F'.$i)->applyFromArray($bordear)->getAlignment()->setWrapText(true);
   

    $i++;
  endforeach;

Это консультация SQL

SELECT a.fecha, a.peso, SUM(d.dosis) AS dosis, a.nDosis,group_concat(f.noFactura,' (',d.dosis,') ') AS noFactura, f.precio * d.dosis AS Tprecio, f.precio, a.Medico, m.nombreMedicamento
             FROM app a
             JOIN dosis d ON a.idDosis = d.idDosis
             JOIN facturas f ON d.idFactura = f.idFactura
             JOIN medicamentos m ON m.idMedicamento = f.idMedicamento
             WHERE a.fecha BETWEEN '2019-02-01' AND '2019-02-31' AND a.idPaciente = '23' GROUP BY  f.noFactura, a.fecha ORDER BY a.fecha;

Я сделана неразбериху при этом из if уже я это попробовал нескольких форм, но я не добиваюсь, чтобы остался, как я хочу, я надеюсь, что кто-то может помогать мне заранее Спасибо!

1
задан 05.11.2019, 18:14
1 ответ

SQL очень хороший, чтобы делать суммы, распоряжения и группирования, из-за которого deberГ, - когда ты быть первым opciГіn для этого типа заданий. Исправляя группирование ты уберегаешься sumatorias в PHP, исключая Полную Общую сумму.

SELECT fecha
     , peso
     , medicamento
     , sum(dosis)
     , group_concat(noFactura,' (',dosis,') ') AS noFactura
     , group_concat(precio) AS precio
     , sum(precio * dosis) AS Totalprecio
  FROM aplicaciones  
  WHERE fecha BETWEEN '2019-10-01' AND '2019-10-31' 
    AND idPaciente = '2' 
  GROUP BY  fecha, idMedicamento
1
ответ дан 01.12.2019, 12:47
  • 1
    Большое спасибо я сделал изменение в консультацию добавляя JOIN, ты можешь помогать мне с примером. – isela rojo 05.11.2019, 18:19
  • 2
    Если связь - 1:1 не tendrá s проблема, если его 1:* для каждой колонны JOIN, в которой ты нуждаешься в SELECT deberá s использовать какую-то funció n agregació n. – Sal 05.11.2019, 18:46

Теги

Похожие вопросы