myNameX 0 Denunciar post Postado Maio 7, 2015 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
Beraldo 864 Denunciar post Postado Maio 7, 2015 o while já traz todos os registros do SELECT. Não precisa do for dentro do while Compartilhar este post Link para o post Compartilhar em outros sites
myNameX 0 Denunciar post Postado Maio 7, 2015 Sim eu sei, mas como faço pra listar todos os dias dos meses e com os dados certos para cada dia? Compartilhar este post Link para o post Compartilhar em outros sites
myNameX 0 Denunciar post Postado Maio 7, 2015 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
Beraldo 864 Denunciar post Postado Maio 7, 2015 A data está no campo "date", que você usou no código. Não precisa de loop pra isso Compartilhar este post Link para o post Compartilhar em outros sites
myNameX 0 Denunciar post Postado Maio 7, 2015 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
Beraldo 864 Denunciar post Postado Maio 7, 2015 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
myNameX 0 Denunciar post Postado Maio 7, 2015 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
Beraldo 864 Denunciar post Postado Maio 7, 2015 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
myNameX 0 Denunciar post Postado Maio 7, 2015 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
Beraldo 864 Denunciar post Postado Maio 7, 2015 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
myNameX 0 Denunciar post Postado Maio 7, 2015 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
Beraldo 864 Denunciar post Postado Maio 7, 2015 printf/sprintf: php > printf("%02d\n", 1); 01 você pode usar date('t') em um loop para iniciar todos os índices de $ganhos com 0, em vez de fazer os 31 manualmente. Compartilhar este post Link para o post Compartilhar em outros sites
myNameX 0 Denunciar post Postado Maio 7, 2015 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
Beraldo 864 Denunciar post Postado Maio 8, 2015 Tente assim: printf("<tr> <td> %02d/%02d/%4d </td>", (int) $x, (int) date('m'), (int) date('y')); Compartilhar este post Link para o post Compartilhar em outros sites