I have two whiles in php:
<?php
while($row1 = mysqli_fetch_array($result1))
{
?>
<tr>
<td><?php echo $row1["codigo"]; ?></td>
<td><?php echo $row1["nome"]; ?></td>
<td><?php echo $row1["QTD 1º e 2º Hora"]; ?></td>
<td><?php echo $row1["Valor 1º e 2º Hora"]; ?></td>
<td><?php echo $row1["QTD 3º Hora"]; ?></td>
<td><?php echo $row1["Valor 3º Hora"]; ?></td>
<td><?php echo $row1["QTD 4º ou mais Horas"]; ?></td>
<td><?php echo $row1["Valor 4º ou mais Horas"]; ?></td>
<td><?php echo $row1["Valor Total"]; ?></td>
</tr>
<?php
}
?>
Where returns these three lines:
Then I have the second while:
<?php
while($row3 = mysqli_fetch_array($result3))
{
?>
<tr>
<td><?php echo $row3["codigo"]; ?></td>
<td><?php echo $row3["nome"]; ?></td>
<td><?php echo $row3["QTD 1º e 2º Hora"]; ?></td>
<td><?php echo $row3["Valor 1º e 2º Hora"]; ?></td>
<td><?php echo $row3["QTD 3º Hora"]; ?></td>
<td><?php echo $row3["Valor 3º Hora"]; ?></td>
<td><?php echo $row3["QTD 4º ou mais Horas"]; ?></td>
<td><?php echo $row3["Valor 4º ou mais Horas"]; ?></td>
<td><?php echo $row3["Valor Total"]; ?></td>
</tr>
<?php
}
?>
Where returns this line:
The two whiles within the same returns the 4 lines like this:
If you notice these 4 lines you have two lines with the same User Nº. and you can't. What I mean is that lines coming from the second while draw the value and hours of the first while according to the same User Nº.
How can I do this? Basically the idea is to create a credit note system in case of registration mistake.
show code:
$query2 = "SELECT E.DataDia,
E.codigo,
E.nome,
E.Colaborador,
E.`Local`,
E.Datasaida,
E.DataChegada,
E.`Horas Consumidas`,
TIME_FORMAT(SEC_TO_TIME(SUM(E.teste1)),'%i:%s') AS `QTD 1º e 2º Hora`,
CONVERT(CONCAT(SUM(E.Valor), '€'), char(8)) AS `Valor 1º e 2º Hora`,
TIME_FORMAT(SEC_TO_TIME(SUM(E.teste)),'%i:%s') AS `QTD 3º Hora`,
CONVERT(CONCAT(SUM(E.Valor1), '€'), char(8)) AS `Valor 3º Hora`,
TIME_FORMAT(SEC_TO_TIME(SUM(E.teste2)),'%i:%s') AS `QTD 4º ou mais Horas`,
CONVERT(CONCAT(SUM(E.Valor2), '€'), char(8)) AS `Valor 4º ou mais Horas`,
CONVERT(CONCAT(SUM(E.Total), '€'), char(8)) AS `Valor Total`
FROM
(SELECT C.Id,
C.DataDia,
C.codigo,
C.nome,
C.Colaborador,
C.`Local`,
C.Datasaida,
C.DataChegada,
C.`Horas Consumidas`,
C.Minutos,
C.teste1,
C.Valor,
C.teste,
C.Valor1,
C.teste2,
C.Valor2,
C.Valor+C.Valor1+C.Valor2 AS Total
FROM
(SELECT A.Id,
A.DataDia,
A.codigo,
A.nome,
A.Colaborador,
A.`Local`,
A.Datasaida,
A.DataChegada,
A.`Horas Consumidas`,
A.Minutos,
CAST(CASE WHEN A.teste1 IS NULL THEN 0 ELSE A.teste1 END AS DECIMAL (15,2)) AS teste1,
CAST(CASE WHEN D.teste IS NULL THEN 0 ELSE D.teste END AS DECIMAL (15,2)) AS teste,
CAST(CASE WHEN A.teste2 IS NULL THEN 0 ELSE A.teste2 END AS DECIMAL (15,2)) AS teste2,
CAST(CASE WHEN A.Valor IS NULL THEN 0 ELSE A.Valor END AS DECIMAL (15,2)) AS Valor,
CAST(CASE WHEN D.Valor1 IS NULL THEN 0 ELSE D.Valor1 END AS DECIMAL (15,2)) AS Valor1,
CAST(CASE WHEN A.Valor2 IS NULL THEN 0 ELSE A.Valor2 END AS DECIMAL (15,2)) AS Valor2
FROM
(SELECT B.Id,
B.DataDia,
B.codigo,
B.nome,
B.Colaborador,
B.`Local`,
B.Datasaida,
B.DataChegada,
B.`Horas Consumidas`,
B.Minutos,
(CASE WHEN B.Minutos <= 120 THEN B.Minutos ELSE 120 END) AS teste1,
(CASE WHEN B.Minutos <= 120 THEN B.Minutos*20/120 ELSE 20 END) AS Valor,
(CASE WHEN B.Minutos >= 180 THEN B.Minutos-180 ELSE 0 END) AS teste2,
(CASE WHEN B.Minutos >= 180 THEN (B.Minutos-180)*15/60 ELSE 0 END) AS Valor2
FROM
(SELECT A.Id,
A.DataDia,
A.codigo,
A.nome,
A.Colaborador,
A.`Local`,
A.Datasaida,
A.DataChegada,
A.`Horas Consumidas`,
CAST(TIME_TO_SEC(A.`Horas Consumidas`)/60 AS DECIMAL(15,0)) AS Minutos
FROM
(SELECT raddb.NotaCreditoAcompa.Id,
raddb.NotaCreditoAcompa.DataDia,
codigo,
raddb.Utente.nome,
raddb.usuarios.nome AS Colaborador,
`Local`,
DataChegada,
Datasaida,
SUBTIME(DATE_FORMAT(`DataChegada`,'%H:%i'), DATE_FORMAT(`Datasaida`,'%H:%i')) AS `Horas Consumidas`
FROM raddb.NotaCreditoAcompa LEFT OUTER JOIN raddb.Utente
ON raddb.Utente.codigo = raddb.NotaCreditoAcompa.NomeUtente LEFT OUTER JOIN raddb.usuarios
ON raddb.usuarios.id = raddb.NotaCreditoAcompa.Enfermeiro) AS A) AS B
) AS A
LEFT OUTER JOIN
(SELECT B.Id,
B.DataDia,
B.nome,
B.Colaborador,
B.`Local`,
B.Datasaida,
B.DataChegada,
B.`Horas Consumidas`,
B.Minutos,
(CASE WHEN B.Minutos <= 180 THEN B.Minutos-120 ELSE 60 END) AS teste,
(CASE WHEN B.Minutos <= 180 THEN (B.Minutos-120)*12/60 ELSE 12 END) AS Valor1
FROM
(SELECT A.Id,
A.DataDia,
A.nome,
A.Colaborador,
A.`Local`,
A.DataChegada,
A.Datasaida,
A.`Horas Consumidas`,
CAST(TIME_TO_SEC(A.`Horas Consumidas`)/60 AS DECIMAL(15,0)) AS Minutos
FROM
(SELECT raddb.NotaCreditoAcompa.Id,
DataDia,
raddb.Utente.nome,
raddb.usuarios.nome AS Colaborador,
`Local`,
Datasaida,
DataChegada,
SUBTIME(DATE_FORMAT(`DataChegada`,'%H:%i'), DATE_FORMAT(`Datasaida`,'%H:%i')) AS `Horas Consumidas`
FROM raddb.NotaCreditoAcompa LEFT OUTER JOIN raddb.Utente
ON raddb.Utente.codigo = raddb.NotaCreditoAcompa.NomeUtente LEFT OUTER JOIN raddb.usuarios
ON raddb.usuarios.id = raddb.NotaCreditoAcompa.Enfermeiro) AS A) AS B
WHERE B.Minutos > 120 ) AS D
ON A.Id = D.Id) AS C
WHERE date(C.`Datasaida`) BETWEEN '$inicio' AND '$fim') AS E
GROUP BY E.codigo, E.nome, E.DataDia, E.Colaborador, E.`Local`, E.Datasaida, E.DataChegada
ORDER BY E.DataDia ASC";
$query3 = "SELECT E.codigo,
E.nome,
TIME_FORMAT(SEC_TO_TIME(SUM(E.teste1)),'%i:%s') AS `QTD 1º e 2º Hora`,
CONVERT(CONCAT(SUM(E.Valor), '€'), char(8)) AS `Valor 1º e 2º Hora`,
TIME_FORMAT(SEC_TO_TIME(SUM(E.teste)),'%i:%s') AS `QTD 3º Hora`,
CONVERT(CONCAT(SUM(E.Valor1), '€'), char(8)) AS `Valor 3º Hora`,
TIME_FORMAT(SEC_TO_TIME(SUM(E.teste2)),'%i:%s') AS `QTD 4º ou mais Horas`,
CONVERT(CONCAT(SUM(E.Valor2), '€'), char(8)) AS `Valor 4º ou mais Horas`,
CONVERT(CONCAT(SUM(E.Total), '€'), char(8)) AS `Valor Total`
FROM
(SELECT C.Id,
C.codigo,
C.nome,
C.Datasaida,
C.DataChegada,
C.`Horas Consumidas`,
C.Minutos,
C.teste1,
C.Valor,
C.teste,
C.Valor1,
C.teste2,
C.Valor2,
C.Valor+C.Valor1+C.Valor2 AS Total
FROM
(SELECT A.Id,
A.codigo,
A.nome,
A.Datasaida,
A.DataChegada,
A.`Horas Consumidas`,
A.Minutos,
CAST(CASE WHEN A.teste1 IS NULL THEN 0 ELSE A.teste1 END AS DECIMAL (15,2)) AS teste1,
CAST(CASE WHEN D.teste IS NULL THEN 0 ELSE D.teste END AS DECIMAL (15,2)) AS teste,
CAST(CASE WHEN A.teste2 IS NULL THEN 0 ELSE A.teste2 END AS DECIMAL (15,2)) AS teste2,
CAST(CASE WHEN A.Valor IS NULL THEN 0 ELSE A.Valor END AS DECIMAL (15,2)) AS Valor,
CAST(CASE WHEN D.Valor1 IS NULL THEN 0 ELSE D.Valor1 END AS DECIMAL (15,2)) AS Valor1,
CAST(CASE WHEN A.Valor2 IS NULL THEN 0 ELSE A.Valor2 END AS DECIMAL (15,2)) AS Valor2
FROM
(SELECT B.Id,
B.codigo,
B.nome,
B.Datasaida,
B.DataChegada,
B.`Horas Consumidas`,
B.Minutos,
(CASE WHEN B.Minutos <= 120 THEN B.Minutos ELSE 120 END) AS teste1,
(CASE WHEN B.Minutos <= 120 THEN B.Minutos*20/120 ELSE 20 END) AS Valor,
(CASE WHEN B.Minutos >= 180 THEN B.Minutos-180 ELSE 0 END) AS teste2,
(CASE WHEN B.Minutos >= 180 THEN (B.Minutos-180)*15/60 ELSE 0 END) AS Valor2
FROM
(SELECT A.Id,
A.codigo,
A.nome,
A.Datasaida,
A.DataChegada,
A.`Horas Consumidas`,
CAST(TIME_TO_SEC(A.`Horas Consumidas`)/60 AS DECIMAL(15,0)) AS Minutos
FROM
(SELECT raddb.NotaCreditoAcompa.Id,
codigo,
nome,
DataChegada,
Datasaida,
TIMEDIFF(DATE_FORMAT(`DataChegada`,'%H:%i'), DATE_FORMAT(`Datasaida`,'%H:%i')) AS `Horas Consumidas`
FROM raddb.NotaCreditoAcompa LEFT OUTER JOIN raddb.Utente
ON raddb.Utente.codigo = raddb.NotaCreditoAcompa.NomeUtente) AS A) AS B
) AS A
LEFT OUTER JOIN
(SELECT B.Id,
B.nome,
B.Datasaida,
B.DataChegada,
B.`Horas Consumidas`,
B.Minutos,
(CASE WHEN B.Minutos <= 180 THEN B.Minutos-120 ELSE 60 END) AS teste,
(CASE WHEN B.Minutos <= 180 THEN (B.Minutos-120)*12/60 ELSE 12 END) AS Valor1
FROM
(SELECT A.Id,
A.nome,
A.DataChegada,
A.Datasaida,
A.`Horas Consumidas`,
CAST(TIME_TO_SEC(A.`Horas Consumidas`)/60 AS DECIMAL(15,0)) AS Minutos
FROM
(SELECT raddb.NotaCreditoAcompa.Id,
nome,
Datasaida,
DataChegada,
TIMEDIFF(DATE_FORMAT(`DataChegada`,'%H:%i'), DATE_FORMAT(`Datasaida`,'%H:%i')) AS `Horas Consumidas`
FROM raddb.NotaCreditoAcompa LEFT OUTER JOIN raddb.Utente
ON raddb.Utente.codigo = raddb.NotaCreditoAcompa.NomeUtente) AS A) AS B
WHERE B.Minutos > 120 ) AS D
ON A.Id = D.Id) AS C
WHERE date(C.`Datasaida`) BETWEEN '$inicio' AND '$fim') AS E
GROUP BY E.codigo, E.nome
ORDER BY E.nome";
What i tried
<?php
while($row1 = mysqli_fetch_array($result1))
{
while($row3 = mysqli_fetch_array($result3))
{
?>
<tr>
<td><?php echo $row1["codigo"]; ?></td>
<td><?php echo $row1["nome"]; ?></td>
<td><?php echo $row1["QTD 1º e 2º Hora"]; ?> - <?php echo $row3["QTD 1º e 2º Hora"]; ?></td>
<td><?php echo $row1["Valor 1º e 2º Hora"]; ?> - <?php echo $row3["Valor 1º e 2º Hora"]; ?></td>
<td><?php echo $row1["QTD 3º Hora"]; ?> - <?php echo $row3["QTD 3º Hora"]; ?></td>
<td><?php echo $row1["Valor 3º Hora"]; ?> - <?php echo $row3["Valor 3º Hora"]; ?></td>
<td><?php echo $row1["QTD 4º ou mais Horas"]; ?> - <?php echo $row3["QTD 4º ou mais Horas"]; ?></td>
<td><?php echo $row1["Valor 4º ou mais Horas"]; ?> - <?php echo $row3["Valor 4º ou mais Horas"]; ?></td>
<td><?php echo $row1["Valor Total"]; ?> - <?php echo $row3["Valor Total"]; ?></td>
</tr>
<?php
} }
?>