Ir para conteúdo

POWERED BY:

Arquivado

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

sergionpinheiro

Organizar SELECT por data

Recommended Posts

Bom dia galera,

 

Preciso da ajuda de vocês para o seguinte problema:

 

Tenho uma pesquisa no banco MySQL que me retorna o estoque dos usuários. Produto, quantidade etc.

 

Tenho uma div e dentro dela uma tabela listando estes valores.

 

O que eu preciso é: separar as divs por data, ou seja, em cada div, com sua respectiva tabela, ele liste somente os produtos que foram inseridos naquela data específica.

 

Ex.:

<div>
  <table>26/05/2015</table>
</div>
<hr />
<div>
  <table>25/05/2015</table>
</div>
<hr />
<div>
  <table>24/05/2015</table>
</div>

E assim por diante.

 

Acho que precisarei de duas consultas, uma para listar as divs e outra para listar os registros (<tr>) de cada data.

 

Fico no aguardo.

 

Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aew cara, beleza?

 

Complementando a resposta do Williams,

 

Ordene seu select do sql pela data.

 

Depois no PHP, você cria uma variável de controle para gerar código:

 

ficaria algo assim:

<?php
// controle
$dataAnterior = '';
?>
<div>
<?php
foreach($seuArray as $item){
    if($dataAnterior == ''){
        ?>
        <table><?=$item['dataVindaDoBancoDeDados'];?></table>
        <?php
        $dataAnterior = $item['dataVindaDoBancoDeDados'];
    }
    if($dataAnterior != $item['dataVindaDoBancoDeDados']){
        // Encerra a div e cria outra no caso de uma data diferente
        ?>
        </div>
        <div>
        <table><?=$item['dataVindaDoBancoDeDados'];?></table>
        <?php
        $dataAnterior = $item['dataVindaDoBancoDeDados'];
    }
}
?>
</div>

Esta é uma forma de fazer, dá pra fazer também utilizando as datas como indíces do array, e dentro destes índices criar um subarray com os conteúdos destas datas, eu pessoalmente faria desta forma.

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite RodriAndreotti, vou postar meu código completo para ver se clareia para mim a ideia que você postou, como ficaria com o código desta maneira?:

 

<?php


$query_estoque = "SELECT * FROM tb_estoque WHERE EST_USE_CODIGO = '$usuario' ORDER BY EST_CADASTRO DESC";
$estoque = mysql_query($query_estoque) or die(mysql_error());
$row_estoque = mysql_fetch_assoc($estoque);
$totalRows_estoque = mysql_num_rows($estoque);


?>


<div class="well">
  <table class="table table-striped table-hover">
    <thead>
      <tr class="info">
        <th><?php echo $row_estoque['EST_CADASTRO']; ?></th>
      </tr>
      <tr class="active">
        <th>Cód. Barras</th>
        <th>Produto</th>
        <th>Qtd. estoque</th>
        <th>Ações</th>
      </tr>
    </thead>
    <tbody>
    <?php do { ?>
      <tr>
        <td><h4><?php echo $row_estoque['EST_BARRAS']; ?></h4></td>
        <td><h4><?php echo $row_estoque['EST_PRODUTO']; ?></h4></td>
        <td><h4><?php echo $row_estoque['EST_QTD']; ?></h4></td>
        <td><a href="" class="btn btn-success"><i class="fa fa-arrow-circle-right"></i></a></td>
      </tr>
      <?php } while($row_estoque = mysql_fetch_assoc($estoque)); ?>
      <tr>
        <td class="success"><strong>FOTOS</strong></td>
        <td colspan="5">FOTO1 FOTO2 FOTO3</td>
      </tr>
    </tbody>
  </table>
</div>
Nesta parte de fotos, irei carregar as fotos (que estão em outra tabela) vinculadas aquela data.
Quero uma <div> para cada data com todos os registros dentro da tabela.
Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quero uma <div> para cada data com todos os registros dentro da tabela.

E oque você já fez?, da algum erro?, que linha aparece o erro?, querer não é poder!

No fórum auxiliamos, ou seja não espere alguém fazer para você, eu mesmo só posto código quando já foi testado e este sendo reutilizável por todos. ex.: funções e classes especificas.

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php


$data_anterior = "";


$sel_est = "SELECT * FROM tb_estoque";

$qr_est = mysql_query($sel_est);

while ($row_est = mysql_fetch_array($qr_est)) {


$datas_completa = $row_est['EST_CADASTRO'];

$datas = date("d/m/Y", strtotime($datas_completa)) . ",";


}


foreach ($datas as $divs) {

if($data_anterior == "") {


?>

<div class="container">

<div class="row-fluid">

<div class="well">

<table class="table table-striped table-hover">

<thead>

<tr class="info">

<th class="number">DATA:


<?php

echo $divs['EST_CADASTRO'];

$data_anterior = $divs['EST_CADASTRO'];


?>


</th>

</tr>

</thead>

</table>

</div>

</div>

</div>

<?php } if($data_anterior != $divs['EST_CADASTRO']) { ?>

<div class="container">

<div class="row-fluid">

<div class="well">

<table class="table table-striped table-hover">

<thead>

<tr class="info">

<th class="number">DATA:


<?php

echo $divs['EST_CADASTRO'];

$data_anterior = $divs['EST_CADASTRO'];

?>


</th>

</tr>

</thead>

</table>

</div>

</div>

</div>

<?php }} ?>


Está dando erro na linha do foreach: Warning: Invalid argument supplied for foreach() in...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao que parece sua variável $datas não é um array, por isso não você está recebendo esta mensagem.

 

Recomendo iniciarlizar a variável com:

$datas = array();

 

e nesta linha:

$datas = date("d/m/Y", strtotime($datas_completa)) . ",";

Mude para:

$datas[] = date("d/m/Y", strtotime($datas_completa));

Assim o foreach conseguirá iterar através dela.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Valeu Rodrigo, obrigado pela ajuda.

O erro parou de aparecer, mas quando implemento onde realmente vou usar, fica tudo zerado, não carrega os dados os bancos e as datas ficam ou com um 0 ou com 1. Fiz algumas mudanças, mas infelizmente continua do mesmo jeito. Segue o código abaixo.


<?php


$data_anterior = "";

$datas = array();


$sel_est = "SELECT * FROM tb_estoque";

$qr_est = mysql_query($sel_est);

while ($row_est = mysql_fetch_array($qr_est)) {


$datas_completa = $row_est['EST_CADASTRO'];

$datas[] = date("d/m/Y", strtotime($datas_completa)) . ",";


}


foreach ($datas as $divs) {

if($data_anterior == "") {


?>

<div class="well">

<table class="table table-striped table-hover">

<thead>

<tr class="info">

<th class="number">DATA: <?php

echo $divs['EST_CADASTRO'];

$data_anterior = $divs['EST_CADASTRO'];


?></th>

</tr>

<tr class="active">

<th width="20%">Cód. Barras</th>

<th width="40">Produto</th>

<th width="10%">Qtd. estoque</th>

<th width="10%">Ações</th>

</tr>

</thead>

<tbody>

<?php do { ?>

<tr>

<td class="number text-b4w-blue"><h4><?php echo $row_est['PRO_BARRAS']; ?></h4></td>

<td class="number text-b4w-blue"><h4><?php echo $row_est['PRO_PRODUTO']; ?></h4></td>

<td class="number text-b4w-blue"><h4><?php echo $row_est['EST_QTD']; ?></h4></td>

<td><a href="" class="btn btn-success"><i class="fa fa-shopping-cart"></i></a></td>

</tr>

<?php } while($row_est = mysql_fetch_assoc($qr_est)); ?>

<tr>

<td class="success"><strong>FOTOS</strong></td>

<td colspan="5">FOTO1 FOTO2 FOTO3</td>

</tr>

</tbody>

</table>

</div>

<?php } if($data_anterior != $divs['EST_CADASTRO']) { ?>

<div class="well">

<table class="table table-striped table-hover">

<thead>

<tr class="info">

<th class="number">DATA: <?php

echo $divs['EST_CADASTRO'];

$data_anterior = $divs['EST_CADASTRO'];


?></th>

</tr>

<tr class="active">

<th width="20%">Cód. Barras</th>

<th width="40">Produto</th>

<th width="10%">Qtd. estoque</th>

<th width="10%">Ações</th>

</tr>

</thead>

<tbody>

<?php do { ?>

<tr>

<td class="number text-b4w-blue"><h4><?php echo $row_est['PRO_BARRAS']; ?></h4></td>

<td class="number text-b4w-blue"><h4><?php echo $row_est['PRO_PRODUTO']; ?></h4></td>

<td class="number text-b4w-blue"><h4><?php echo $row_est['EST_QTD']; ?></h4></td>

<td><a href="" class="btn btn-success"><i class="fa fa-shopping-cart"></i></a></td>

</tr>

<?php } while($row_est = mysql_fetch_assoc($qr_est)); ?>

<tr>

<td class="success"><strong>FOTOS</strong></td>

<td colspan="5">FOTO1 FOTO2 FOTO3</td>

</tr>

</tbody>

</table>

</div>

<?php }} ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,

 

Observa o seguinte:

 

vc está criando um array com datas ($datas[] = date(...))

 

E na hora de exibir está tentando acessar um índice de um array ( $divs['EST_CADASTRO']);

 

a variável $divs contém cada iteração do array $datas, não é necessário acessar esta chave ['EST_CADASTRO'], somente a variável $divs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo, deu certo com essa mudança que você falou, agora ela está listando as datas perfeitamente. Meu problema agora é, tentei fazer uma consulta para listar os registros do banco de acordo com o array.

 

$sel_estoque = "SELECT * FROM tb_estoque WHERE EST_CADASTRO = '$divs'";
$estoque = mysql_query($sel_estoque);
$row_estoque = mysql_fetch_assoc($estoque);
Coloquei abaixo o foreach, porém só aparece o primeiro registro (tenho 4 registros no banco com datas diferentes), ou seja, somente a primeira div com os dados, as demais aparecem a data, mas os dados da tabela aparecem em branco.
Está correta esta consulta abaixo do foreach?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está certa sim...

Só faltou você criar um laço para percorrer os resultados:

$sel_estoque = "SELECT * FROM tb_estoque WHERE EST_CADASTRO = '$divs'";
$estoque = mysql_query($sel_estoque);

while($row_estoque = mysql_fetch_assoc($estoque)){
// tudo que você quer fazer com o resultado do banco de dados desta consulta vem aqui dentro
}

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.