Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

myNameX

daily reports

Recommended Posts

Poderiam me ajudar a fazer um daily reports?

 

Eu consegui chegar nesse código

$v = $mysqli->query("SELECT * FROM earns WHERE uid='1' AND date BETWEEN '2015-05-01' AND '2015-05-31'");
	while($y = $v->fetch_array()) {
		for($x = 01; $x < 31; $x++) {
            echo "Data: " . $y["date"] . " - ID: " . $y["uid"] . " - Ganhos: " . $y["all"] . "<br />";   
        }
    }

meu retorno é

Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00
Data: 2015-05-06 - ID: 1 - Earns: 333.00

Eu queria que fosse assim:

Data: 2015-05-01 - ID: 1 - Earns: 66.00
Data: 2015-05-02 - ID: 1 - Earns: 454.00
Data: 2015-05-03 - ID: 1 - Earns: 5454.00
Data: 2015-05-04 - ID: 1 - Earns: 4334.00
Data: 2015-05-05 - ID: 1 - Earns: 24.00
Data: 2015-05-06 - ID: 1 - Earns: 54.00
Data: 2015-05-07 - ID: 1 - Earns: 43.00
Data: 2015-05-08 - ID: 1 - Earns: 43.00
Data: 2015-05-09 - ID: 1 - Earns: 54.00
Data: 2015-05-10 - ID: 1 - Earns: 43.00
Data: 2015-05-11 - ID: 1 - Earns: 45.00
Data: 2015-05-12 - ID: 1 - Earns: 43.00
Data: 2015-05-13 - ID: 1 - Earns: 333.00
Data: 2015-05-14 - ID: 1 - Earns: 45.00
Data: 2015-05-15 - ID: 1 - Earns: 45.00
Data: 2015-05-16 - ID: 1 - Earns: 5.00
Data: 2015-05-17 - ID: 1 - Earns: 3733.00
Data: 2015-05-18 - ID: 1 - Earns: 76.00
Data: 2015-05-19 - ID: 1 - Earns: 333.00
Data: 2015-05-20 - ID: 1 - Earns: 333.00
Data: 2015-05-21 - ID: 1 - Earns: 56.00
Data: 2015-05-22 - ID: 1 - Earns: 454.00
Data: 2015-05-23 - ID: 1 - Earns: 34.00
Data: 2015-05-24 - ID: 1 - Earns: 65.00
Data: 2015-05-25 - ID: 1 - Earns: 333.00
Data: 2015-05-26 - ID: 1 - Earns: 545.00
Data: 2015-05-27 - ID: 1 - Earns: 65.00
Data: 2015-05-28 - ID: 1 - Earns: 43.00
Data: 2015-05-29 - ID: 1 - Earns: 34.00
Data: 2015-05-30 - ID: 1 - Earns: 65.00
Data: 2015-05-31 - ID: 1 - Earns: 365.00

(OBS) Apenas uma demonstração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui chegar nisso, mas ainda sim não lista os 31 dias do mês.

<?php 
    $sql = $mysqli->query("SELECT * FROM earns WHERE uid='1' AND date BETWEEN '2015-05-01' AND '2015-05-31'");
    while($fetch = $sql->fetch_array()) {
        $date =    $fetch['date'];
        $var = $date;
        $date = date("d-m-Y", strtotime($var) );
        $date=substr($date, 0, -8); 
        echo "<tr>";
        echo "<td> $date/05/2015 </td>";
        echo "<td> ".$fetch["uid"]." </td>";
        for($x = 01; $x <= 31; $x++) {
            if($date == $x) {
                echo "<td> ".$fetch["all"]." </td>";
            }
        }
        echo "</tr>";
    }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas o que eu preciso é listar todos 31 dias em uma tabela e depois ir verificando se existe algum ganho naquela data, se existir ele mostra os ganhos, caso não existe fica só 0.00. Também os dias que não chegaram ficam 0.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie um array com todos os dias do mês. Pode usar date('t') para buscar o total de dicas do mês (nem todos têm 31). Veja: http://php.net/manual/pt_BR/function.date.php

 

Inicie todos os índices com zero.

 

No seu while, pegue o dia referente ao ganho e salve esse valor no array anterior.

 

Em seguida percorra o array, exibindo os ganhos de cada dia.

 

Ideia geral:

 

$ganhos = [
    1 => 0,
    2 => 0,
    ...
    31 => 0
];
 
while ( $dado = fetch() )
{
    $dia = $dado['dia'];
    $ganhos[$dia] = $dado['ganho'];
}
 
percorrer o array $ganhos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem.

 

Eu fiz isso

$ganhos = [1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0, 10 => 0, 11 => 0, 12 => 0, 13 => 0, 14 => 0, 15 => 0, 16 => 0, 17 => 0, 18 => 0, 19 => 0, 20 => 0, 21 => 0, 22 => 0, 23 => 0, 24 => 0, 25 => 0, 26 => 0, 27 => 0, 28 => 0, 29 => 0, 30 => 0, 31 => 0];
 			
			while($row4 = $check->fetch_array()) {
				$day = explode('/', $row4['date']);
				$dia = $day[0];
				echo "<tr>";
				echo "<td> $dia/05/2015 </td>";
				echo "<td> ".$row4["userid"]." </td>";
				for($x = 01; $x <= 31; $x++) {
					if($dia == $x) { 
						$ganhos[$dia] = $row4['all'];
						echo "<td> ".$ganhos[$dia]." </td>";
					}
				}
				echo "</tr>";
			}

Mas só aparece os dias que existe no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu array $ganhos pode ser preenchido usando um loop.

 

for ( $i = 1, $dias = date('t'); $i <= $dias; $i++ )
    $ganhos[ $i ] = 0;

 

Seu while deve só preencher o array $ganhos. Não deve exibir nada, pois pode haver dias sem ganhos.

 

Depois do while, o array $ganhos está completo, com os ganhos de todos os dias do mês. Basta percorrê-lo com um loop e exibir seus valores

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece que está quase lá, está listando a data até o dia 31, mas agora preciso pegar os dados através dos dias corretos

<?php 
    $sql = $mysqli->query("SELECT * FROM earns WHERE userid='1' AND Data BETWEEN '2015-05-01' AND '2015-05-31'");
    $ganhos = [01 => 0, 02 => 0, 03 => 0, 04 => 0, 05 => 0, 06 => 0, 07 => 0, 08 => 0, 09 => 0, 10 => 0, 11 => 0, 12 => 0, 13 => 0, 14 => 0, 15 => 0, 16 => 0, 17 => 0, 18 => 0, 19 => 0, 20 => 0, 21 => 0, 22 => 0, 23 => 0, 24 => 0, 25 => 0, 26 => 0, 27 => 0, 28 => 0, 29 => 0, 30 => 0, 31 => 0];

    while($fetch = $sql->fetch_array()) {
        for($x = 01, $dias = date('t'); $x <= $dias; $x++) {
            $ganhos[$x] = $fetch['all'];
        }
    }
    for($y = 01; $y <= 31; $y++) {
        echo "<tr> <td> $y/05/2015 </td>";
        echo "<td> 1 </td>";
        echo "<td> ".$ganhos[$y]." </td> </tr>";
    }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

De novo, tire o for de dentro do while

while($fetch = $sql->fetch_array())
{
     $dia = $fetch['dia']; // o dia do registro corrente
     $ganhos[$dia] = $fetch['all'];
}

já pensou nos meses com menos de 31 dias? Por isso sugeri usar date('t')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado, deu certo.

 

Só mais uma coisa, como eu faço pra deixar a data como 01, 02 .. 09

 

eu deixei 01 no loop e não funcionou

<?php 
    $sql = $mysqli->query("SELECT * FROM earns WHERE userid='1' AND Data BETWEEN '2015-05-01' AND '2015-05-31'");
    $ganhos = [01 => 0, 02 => 0, 03 => 0, 04 => 0, 05 => 0, 06 => 0, 07 => 0, 08 => 0, 09 => 0, 10 => 0, 11 => 0, 12 => 0, 13 => 0, 14 => 0, 15 => 0, 16 => 0, 17 => 0, 18 => 0, 19 => 0, 20 => 0, 21 => 0, 22 => 0, 23 => 0, 24 => 0, 25 => 0, 26 => 0, 27 => 0, 28 => 0, 29 => 0, 30 => 0, 31 => 0];

    while($fetch = $sql->fetch_array()) {
        $day = explode("-", $fetch["date"]);
        $ganhos[$day[2]] = $fetch['all'];
    }
    for($x = 01, $dias = date('t'); $x <= $dias; $x++) {
        echo "<tr> <td> $x/05/2015 </td>";
        echo "<td> 1 </td>";
        echo "<td> ".$ganhos[$x]." </td> </tr>";
    }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, o problema está no último loop, ele conta assim:

 

1

2

3

...

31

 

tinha que ser assim:

01

02

03

...

31

for($x = 0, $dias = date('t'); $x <= $dias; $x++) {
				printf("<tr> <td> %02d/%02d/%02d </td>", $x, date('m'), date('y'));
				echo "<td> ".$ganhos[$x]." </td> </tr>";
			}

Eu fiz o teste é a variável $x

Acredito que tenho que converter-la

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.