Jump to content
heenrique

Agrupar por data

Recommended Posts

Boa Noite

 

amigos tenho um select no qual me retorna o seguinte 

SELECT * FROM sis_suporte WHERE tecnico = '1' AND abertura < '2019-10-30';
+----+--------------------------------------+------------+---------------------+---------------------+-------+---------+----------------+-----------------------------+------------------+----------------------------+---------------------+------------+--------------+-------+---------+-------------+------------------------------------------------------------------+
| id | uuid_suporte                         | assunto    | abertura            | fechamento          | email | status  | chamado        | nome                        | login            | atendente                  | visita              | prioridade | ramal        | reply | tecnico | login_atend | motivo_fechar                                                    |
+----+--------------------------------------+------------+---------------------+---------------------+-------+---------+----------------+-----------------------------+------------------+----------------------------+---------------------+------------+--------------+-------+---------+-------------+------------------------------------------------------------------+
| 36 | 1901294b-80e6-4389-9059-fa090c09e382 | Outros     | 2019-09-14 19:27:42 | 2019-10-17 19:35:20 | NULL  | aberto  | 14091919272653 | Alex Ramos dos Santos       | alex.santos      | Letícia Paula de Oliveira  | 2019-10-17 16:27:15 | normal     | SAO PAULO    | nao   |       1 | leticia     | TÉCNICO HENRIQUE FINALIZOU A ORDEM: CLIENTE BLOQUEADO            |
| 37 | af8da3e7-9dbc-45b9-945b-d50cd45d9ea6 | Outros     | 2019-09-14 19:37:13 | 2019-10-04 21:11:25 | NULL  | fechado | 14091919370623 | Alexsandro Santos Braz      | alesysandro.braz | Letícia Paula de Oliveira  | 2019-10-04 16:37:15 | normal     | SAO PAULO    | nao   |       1 | leticia     | TÉCNICO HENRIQUE FINALIZOU A ORDEM:                              |
| 39 | 2b03e9d4-50ca-4713-8149-88fe083fb9d9 | Instalacao | 2019-09-16 17:00:22 | 2019-10-03 22:38:23 | NULL  | fechado | 16091916593665 | Henrique Gabriel de Almeida | teste            | Letícia Paula de Oliveira  | 2019-10-03 08:00:15 | normal     | POUSO ALEGRE | sim   |       1 | leticia     | TÉCNICO HENRIQUE FINALIZOU A ORDEM: QWE                          |
| 40 | b2c0fc23-0a5c-46ae-a8b8-a8641b1d53c4 | Outros     | 2019-10-03 23:21:22 | 2019-10-03 23:36:51 | NULL  | fechado | 03101923210987 | Henrique Gabriel de Almeida | teste            | sistema                    | 2019-10-03 14:21:15 | normal     | POUSO ALEGRE | nao   |       1 | admin       | TÉCNICO HENRIQUE FINALIZOU A ORDEM: RELIGUEI A FONTE DO CLIENTE  |
| 41 | e9aaf792-56c6-4fe1-b8c3-aa51338f65d1 | Outros     | 2019-10-03 23:23:02 | 2019-10-03 23:46:01 | NULL  | fechado | 03101923225491 | Cintia Rocha Vaz            | cintia.vaz       | sistema                    | 2019-10-03 17:22:15 | normal     | SAO PAULO    | nao   |       1 | admin       | TÉCNICO HENRIQUE FINALIZOU A ORDEM: 12                           |
+----+--------------------------------------+------------+---------------------+---------------------+-------+---------+----------------+-----------------------------+------------------+----------------------------+---------------------+------------+--------------+-------+---------+-------------+------------------------------------------------------------------+
5 rows in set (0.00 sec)

e quando imprimo sai um por um, gostaria de agrupar por data de abertura ex.

 

2019-09-14

Alex Ramos

Alexsandro

 

2019-09-16

Henrique

 

2019-10-03

Henrique

Cintia

 

como agrupar isso em php,

 

esse e o cod onde eu imprimo

 

                                        <?php while($dados = mysqli_fetch_assoc($resultado_os)){						if ($dados['status'] == 'aberto'){ ?>
                                            <div class='row'>
                                                <div class='col-md-12'>
                                                    <a href='os.php?os=<?php echo $dados['chamado']; ?>'>
                                                        <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-agua'><i style='padding-top: 35%;' class='ion ion-ios-gear-outline'></i></span>
                                                            <div class='info-box-content'> <span class='info-box-text'><b>ABERTA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo $dados['chamado']; ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['visita']))->format('d/m/Y - H:i'); ?></span> </a>
                                                    </div>
                                                    </div>
                                                    <?php 	}	if ($dados['status'] == 'fechado'){ ?>
                                                        <div class='row'>
                                                            <div class='col-md-12'>
                                                                <a href='os.php?os=<?php echo $dados['chamado']; ?>'>
                                                                    <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-red'><i style='padding-top: 35%;' class="fa fa-check" aria-hidden="true"></i></span>
                                                                        <div class='info-box-content'> <span class='info-box-text'><b>FINALIZADA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo $dados['chamado']; ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['fechamento']))->format('d/m/Y - H:i'); ?></span> </a>
                                                                </div>
                                                                </div>
                                                                <?php }	}  ?>
                                                            </div>
                                                        </div>
                                                </div>
                    </section>
                    </div>

 

Share this post


Link to post
Share on other sites
1 hora atrás, Felipe Guedes Coutinho disse:

@heenrique

 

Experimente usar o SELECT abaixo:

 


"SELECT * FROM sis_suporte WHERE tecnico = '1' AND abertura < '2019-10-30' Group By DATE(abertura);"

Espero ter ajudado.

 

Att.

Felipe Coutinho

Olá Felipe, tentei mas não agrupa, creio que seja porque tem hora no campo abertura e são horas variadas, sou iniciante em sql tem alguma maneira de selecionar só o dia ?

Share this post


Link to post
Share on other sites
2 horas atrás, Felipe Guedes Coutinho disse:

@heenrique

 

Experimente usar o SELECT abaixo:

 


"SELECT * FROM sis_suporte WHERE tecnico = '1' AND abertura < '2019-10-30' Group By DATE(abertura);"

Espero ter ajudado.

 

Att.

Felipe Coutinho

Olá Felipe, tenteu mas não agrupa, creio que porque tem hora no campo abertura e são horas variadas, sou iniciante em sql tem alguma maneira de selecionar só o dia ?

Share this post


Link to post
Share on other sites

@heenrique

 

O Group By que te passei TEM que funcionar.

Quando se defini GROUP BY DATE(), não importa se o campo da sua tabela é um DATE (01-01-0001) ou um TIMESTAMP (0001-01-01 23.59.59) o comando DATE() transforma o TIMESTAMP em DATE para a comparação.

 

Só para que não fique com dúvida do que eu estou falando, da uma olhada na dúvida e na explicação aqui neste link do STACKOVERFLOW Agrupar por DATA um campo TIMESTAMP

 

EXEMPLO RETIRADO DO LINK:

 

2 RESPOSTA Utilize a função DATE, da seguinte maneira:
$sql = "SELECT * FROM tbl_reclamacoes GROUP BY DATE(data_reclamacoes) ORDER BY data_reclamacoes ASC";

Ela irá trazer somente a data no momento de agrupar.

 

 

Se você não conseguir fazer mesmo com a explicação do link e com a sugestão que eu lhe passei, mande o código que faz o select e a listagem do seu PHP para que fique melhor a analise e post a estrutura da sua tabela para quem quiser ajudar poder replicar o seu caso, resolver e mostrar a solução.

 

Exemplo da estrutura:

image.png.c22183eb868b413669194f0b2beeec12.png

 

Fico no aguardo.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites
Em 21/10/2019 at 15:34, Felipe Guedes Coutinho disse:

@heenrique

 

O Group By que te passei TEM que funcionar.

Quando se defini GROUP BY DATE(), não importa se o campo da sua tabela é um DATE (01-01-0001) ou um TIMESTAMP (0001-01-01 23.59.59) o comando DATE() transforma o TIMESTAMP em DATE para a comparação.

 

Só para que não fique com dúvida do que eu estou falando, da uma olhada na dúvida e na explicação aqui neste link do STACKOVERFLOW Agrupar por DATA um campo TIMESTAMP

 

EXEMPLO RETIRADO DO LINK:

 

2 RESPOSTA Utilize a função DATE, da seguinte maneira:

$sql = "SELECT * FROM tbl_reclamacoes GROUP BY DATE(data_reclamacoes) ORDER BY data_reclamacoes ASC";

Ela irá trazer somente a data no momento de agrupar.

 

 

Se você não conseguir fazer mesmo com a explicação do link e com a sugestão que eu lhe passei, mande o código que faz o select e a listagem do seu PHP para que fique melhor a analise e post a estrutura da sua tabela para quem quiser ajudar poder replicar o seu caso, resolver e mostrar a solução.

 

Exemplo da estrutura:

image.png.c22183eb868b413669194f0b2beeec12.png

 

Fico no aguardo.

 

Att.

Felipe Coutinho

Olá Felipe, tentei tentei mas nao consegui,

 

Esta é a estrutura da tabela:

image.png.81ca2cba03b1c0a8e0bb6a05815ea5a0.png

 

Ao executar o comando 

SELECT * FROM sis_suporte GROUP BY DATE(abertura) ORDER BY visita ASC

ele me retorna:

image.thumb.png.529a122ff05813b2717d3b3c983338cd.png

 

ao executar:

SELECT * FROM sis_suporte

Retorna:

image.thumb.png.5fef79c33501273005eb7dead67f0b4f.png

Meu codigo php:

<?php
        include_once "verifica_login.php";
		verificaLogin();
		include("conn.php");
		date_default_timezone_set('America/Sao_Paulo');
		$id = $_SESSION['user_id'];
		$nome = $_SESSION['user_nome'];
		$acesso = $_SESSION['user_acesso'];
		$func = $_SESSION['user_func'];
		$hoje = date("Y-m-d");		
		//SELECTS		

		$result_os = "SELECT * FROM sis_suporte GROUP BY DATE(abertura) ORDER BY visita ASC ";
		//$result_os = "SELECT DATE_FORMAT(date,'%Y-%m-%d') as abertura FROM sis_suporte WHERE tecnico = '1' AND abertura < '2019-10-30' Group By nome;";
		$resultado_os = mysqli_query($mysqli, $result_os);		

?>

    <html>
    <!DOCTYPE html>
    <html>

    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>            <?php echo $hoje ?>
        </title>
        <!-- Tell the browser to be responsive to screen width -->
        <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
        <!-- Bootstrap 3.3.7 -->
        <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.min.css">
        <!-- Font Awesome -->
        <link rel="stylesheet" href="bower_components/font-awesome/css/font-awesome.min.css">
        <!-- Ionicons -->
        <link rel="stylesheet" href="bower_components/Ionicons/css/ionicons.min.css">
        <!-- jvectormap -->
        <link rel="stylesheet" href="bower_components/jvectormap/jquery-jvectormap.css">
        <!-- Theme style -->
        <link rel="stylesheet" href="dist/css/AdminLTE.min.css">
        <!-- AdminLTE Skins. Choose a skin from the css/skins
       folder instead of downloading all of them to reduce the load. -->
        <link rel="stylesheet" href="dist/css/skins/_all-skins.min.css">

        <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
        <!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
  <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  <![endif]-->

        <!-- Google Font -->
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
    </head>

    <body class="hold-transition skin-blue sidebar-mini">
        <div class="wrapper">
            <!-- MENU -->
            <?php include "includes/menu.php"; ?>
                <!-- Content Wrapper. Contains page content -->
                <div class="content-wrapper">
                    <!-- Main content -->
                    <section class="content">
                        <!-- Info boxes -->
                        <div class="row">
                            <div class="col-md-12">
                                <div class="box box-info">
                                    <div class="box-header with-border">
                                        <h3 class="box-title"><b>TODAS O.S</b></h3>
                                    </div>
                                    <!-- /.box-header -->
                                    <div id="atualizar" class="box-body">
									
                                        <?php while($dados = mysqli_fetch_assoc($resultado_os)){
										
										
										if ($dados['status'] == 'aberto'){ ?>
                                            <div class='row'>
                                                <div class='col-md-12'>
                                                    <a href='os.php?os=<?php echo $dados['chamado']; ?>'>
                                                        <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-agua'><i style='padding-top: 35%;' class='ion ion-ios-gear-outline'></i></span>
                                                            <div class='info-box-content'> <span class='info-box-text'><b>ABERTA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo $dados['chamado']; ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['visita']))->format('d/m/Y - H:i'); ?></span> </a>
                                                    </div>
                                                    </div>
                                                    <?php 	}	if ($dados['status'] == 'fechado'){ ?>
                                                        <div class='row'>
                                                            <div class='col-md-12'>
                                                                <a href='os.php?os=<?php echo $dados['chamado']; ?>'>
                                                                    <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-red'><i style='padding-top: 35%;' class="fa fa-check" aria-hidden="true"></i></span>
                                                                        <div class='info-box-content'> <span class='info-box-text'><b>FINALIZADA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo $dados['chamado']; ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['fechamento']))->format('d/m/Y - H:i'); ?></span> </a>
                                                                </div>
                                                                </div>
                                                                <?php }	}  ?>
                                                            </div>
                                                        </div>
                                                </div>
                    </section>
                    </div>
                    <!-- /.content-wrapper -->

                    <!-- RODAPE -->
                    <?php include "includes/rodape.php"; ?>
                        </div>
                        <!-- ./wrapper -->

                        <!-- jQuery 3 -->
                        <script src="bower_components/jquery/dist/jquery.min.js"></script>
                        <!-- Bootstrap 3.3.7 -->
                        <script src="bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
                        <!-- FastClick -->
                        <script src="bower_components/fastclick/lib/fastclick.js"></script>
                        <!-- AdminLTE App -->
                        <script src="dist/js/adminlte.min.js"></script>
                        <!-- Sparkline -->
                        <script src="bower_components/jquery-sparkline/dist/jquery.sparkline.min.js"></script>
                        <!-- jvectormap  -->
                        <script src="plugins/jvectormap/jquery-jvectormap-1.2.2.min.js"></script>
                        <script src="plugins/jvectormap/jquery-jvectormap-world-mill-en.js"></script>
                        <!-- SlimScroll -->
                        <script src="bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
                        <!-- ChartJS -->
                        <script src="bower_components/chart.js/Chart.js"></script>
                        <!-- AdminLTE dashboard demo (This is only for demo purposes) -->
                        <script src="dist/js/pages/dashboard2.js"></script>
                        <!-- AdminLTE for demo purposes -->
                        <script src="dist/js/demo.js"></script>
    </body>

    </html>

minha ideia é exibir algo assim:

image.png.69f6ea93198e49488ef8601ed8f3206d.png

 

agradeço pela ajuda!

Share this post


Link to post
Share on other sites

@heenrique

 

Acho que temos um erro na sua lógica ou eu entendi errado.

 

Só para exclarecer, você quer LISTAR TODAS AS SUAS ORDENS DE SERVIÇOS ou LISTAR APENAS 1 ORDEM DE SERVIÇO DE CADA DATA?

 

Porque assim, se você usar o GROUP BY você estará exibindo apenas 1 chamado daquele dia, porque ele vai "AGRUPAR" por data, ou seja, vou usar o exemplo dessa imagem que você diz querer o resultado.

 

Temos 3 ordens de serviços aberta no dia 12/10/2019, 2 abertas no dia 11/10/2019 e mais 2 abertas no dia 10/10/2019... se eu executar o GROUP BY o meu resultado final será 1 chamado do dia 12/10/2019, 1 chamado do dia 11/10/2019 e 1 chamado do dia 10/10/2019... É isso que você quer?

 

CASO ESTE NÃO SEJA O CENÁRIO QUE VOCÊ DESEJA, o que eu recomendo você a fazer é o seguinte.

 

1 - Primeiro, realizar um select ORDENANDO pela data de abertura.

 

2 - No WHILE para se listar você precisa comparar a data de ABERTURA com uma data_anterior.

 

3 - Explicando então como funciona, se a data do registro for diferente da data_anterior, você da um print na data, então teremos a primeira impressão na tela

 

12/10/2019

Após imprimir a data, jogamos o resultado da data do registro para a variável da data anterior para a próxima comparação do registro a ser lido.

 

AI IMPRIMOS O PRIMEIRO REGISTRO 

 

12/10/2019

os: 10

 

Voltamos para o WHILE, lemos o próximo registro.

 

COMPARAMOS a data do registro atual com a data_anterior.

 

SE FOR IGUAL, não imprimimos a data, apenas o registro ficando assim:

 

12/10/2019

os: 10

ps: 9

 

SE a data for DIFERENTE impimimos a data e o registro

 

12/10/2019

os: 10

11/10/2019

os: 9

 

Então ficamos neste laço até ler todas as ordens de serviço.

 

ISSO ira gerar algo parecido com isso:

 

12/10/2019
os: 10
os:  9
os:  8
11/10/2019
os:  7
os:  6
10/10/2019
os:  5
os:  4

 

Me diga o que realmente você quer E SE O ERRO que você está recebendo é de COMANDO COM PROBLEMA ou o ERRO DE LÓGICA como eu imagino que seja.

 

Fico no aguardo.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites

@heenrique

 

Só para você ver, eu montei o seu ambiente de teste aqui e coloquei a lógica que eu falei, segue abaixo, veja se não é o que você espera.

 

Repare que eu removi o seu comando select de cima da página e deixei mais próximo do WHILE para melhor visualização e entendimento.

  <div id="atualizar" class="box-body">
      <?php
      //SELECTS
      $data_anterior = "";
      $result_os  = "SELECT * FROM sis_suporte ORDER BY abertura DESC";
      $resultado_os  = mysqli_query($mysqli, $result_os );
      while($dados = mysqli_fetch_assoc($resultado_os )) {
          if ($dados['abertura'] != $data_anterior) {
              echo (new DateTime($dados['abertura']))->format('d/m/Y');
          }
          $data_anterior = $dados['abertura'];
          ?>
          <div class='row'>
              <div class='col-md-12'>
                  <a href='os.php?os=<?php echo $dados['chamado']; ?>'>Open OS</a>
            <?php if ($dados['status'] == 'Aberto'){ ?>
                  <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-agua'><i style='padding-top: 35%;' class='ion ion-ios-gear-outline'></i></span>
                      <div class='info-box-content'> <span class='info-box-text'><b>ABERTA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo utf8_encode($dados['chamado']); ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><br /><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['visita']))->format('d/m/Y - H:i'); ?></span> </a>
                      </div>
                  </div>
            <?php }
                  if ($dados['status'] == 'Fechado') { ?>
                  <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-red'><i style='padding-top: 35%;' class="fa fa-check" aria-hidden="true"></i></span>
                      <div class='info-box-content'> <span class='info-box-text'><b>FINALIZADA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo utf8_encode($dados['chamado']); ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><br /><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['fechamento']))->format('d/m/Y - H:i'); ?></span> </a>
                      </div>
                  </div>
            <?php } ?>
              </div>
          </div>
<?php } ?>
  </div>

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites
1 hora atrás, Felipe Guedes Coutinho disse:

@heenrique

 

Só para você ver, eu montei o seu ambiente de teste aqui e coloquei a lógica que eu falei, segue abaixo, veja se não é o que você espera.

 

Repare que eu removi o seu comando select de cima da página e deixei mais próximo do WHILE para melhor visualização e entendimento.


  <div id="atualizar" class="box-body">
      <?php
      //SELECTS
      $data_anterior = "";
      $result_os  = "SELECT * FROM sis_suporte ORDER BY abertura DESC";
      $resultado_os  = mysqli_query($mysqli, $result_os );
      while($dados = mysqli_fetch_assoc($resultado_os )) {
          if ($dados['abertura'] != $data_anterior) {
              echo (new DateTime($dados['abertura']))->format('d/m/Y');
          }
          $data_anterior = $dados['abertura'];
          ?>
          <div class='row'>
              <div class='col-md-12'>
                  <a href='os.php?os=<?php echo $dados['chamado']; ?>'>Open OS</a>
            <?php if ($dados['status'] == 'Aberto'){ ?>
                  <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-agua'><i style='padding-top: 35%;' class='ion ion-ios-gear-outline'></i></span>
                      <div class='info-box-content'> <span class='info-box-text'><b>ABERTA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo utf8_encode($dados['chamado']); ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><br /><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['visita']))->format('d/m/Y - H:i'); ?></span> </a>
                      </div>
                  </div>
            <?php }
                  if ($dados['status'] == 'Fechado') { ?>
                  <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-red'><i style='padding-top: 35%;' class="fa fa-check" aria-hidden="true"></i></span>
                      <div class='info-box-content'> <span class='info-box-text'><b>FINALIZADA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo utf8_encode($dados['chamado']); ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><br /><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['fechamento']))->format('d/m/Y - H:i'); ?></span> </a>
                      </div>
                  </div>
            <?php } ?>
              </div>
          </div>
<?php } ?>
  </div>

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Felipe, MUITO OBRIGADO! pela paciência e por me ajuda, só preciso de uma ultima ajudinha!

 

acho que deve ter me expressado muito mal, usando seu código que você me mandou fica assim:

  <div id="atualizar" class="box-body">
      <?php
      //SELECTS
      $data_anterior = "";
      $result_os  = "SELECT * FROM sis_suporte WHERE tecnico = '$func' AND abertura < '$hoje' ORDER BY visita ASC";
      $resultado_os  = mysqli_query($mysqli, $result_os );
      while($dados = mysqli_fetch_assoc($resultado_os )) {
          if ($dados['abertura'] != $data_anterior) {
              echo (new DateTime($dados['abertura']))->format('d/m/Y');
          }
          $data_anterior = $dados['abertura'];
          ?>
          <div class='row'>
              <div class='col-md-12'>
                  <a href='os.php?os=<?php echo $dados['chamado']; ?>'></a>
                  <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-red'><i style='padding-top: 35%;' class="fa fa-check" aria-hidden="true"></i></span>
                      <div class='info-box-content'> <span class='info-box-text'><b>FINALIZADA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo utf8_encode($dados['chamado']); ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['visita']))->format('d/m/Y - H:i'); ?></span> </a>
                      </div>
                  </div>				  
              </div>
          </div>
<?php } ?>
  </div>

image.thumb.png.fc4237090721c238daadf65d6306ecbf.png

 

mas fui tentar agrupar por outro campo ela ficou assim:

estou tentando comparar usando dados da coluna visita:

  <div id="atualizar" class="box-body">
      <?php
      //SELECTS
      $data_anterior = "";
      $result_os  = "SELECT * FROM sis_suporte WHERE tecnico = '$func' AND abertura < '$hoje' ORDER BY visita ASC";
      $resultado_os  = mysqli_query($mysqli, $result_os );
      while($dados = mysqli_fetch_assoc($resultado_os )) {
          if ($dados['visita'] != $data_anterior) {
              echo (new DateTime($dados['visita']))->format('d/m/Y');
          }
          $data_anterior = $dados['visita'];
          ?>
          <div class='row'>
              <div class='col-md-12'>
                  <a href='os.php?os=<?php echo $dados['chamado']; ?>'></a>
                  <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-red'><i style='padding-top: 35%;' class="fa fa-check" aria-hidden="true"></i></span>
                      <div class='info-box-content'> <span class='info-box-text'><b>FINALIZADA</b></span> <span class='info-box-text'><b>O.S:</b><?php echo utf8_encode($dados['chamado']); ?></span> <span class='info-box-text'><b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'><b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'><b>DATA/HORA:</b><?php echo (new DateTime($dados['visita']))->format('d/m/Y - H:i'); ?></span> </a>
                      </div>
                  </div>				  
              </div>
          </div>
<?php } ?>
  </div>

é mostra assim

image.thumb.png.a62b75d7cc39be3cbb0975e5ccb5ec27.png

Share this post


Link to post
Share on other sites

@heenrique

 

Me desculpa, mas eu não consegui entender o que está acontecendo com o que você QUER realmente.

 

Não sei se você sabe o conceito do GROUP BY, caso você saiba ótimo, mas caso não saiba vou te explicar, o comando GROUP BY JUNTA tudo o que for REPETIDO, logo se eu tenho uma coluna de números 1, 2 e 3, ele ira exibir apenas 1 numero de cada um desses números, mesmo que tenha 10 números 1, 20 números 2 e 30 números 3, é isso que o comando GROUP BY faz, junta tudo o que é repedito e mostra apenas 1 registro.

 

Bom dito isso, me diga, por que você quer agrupar por DATA? Qual é o resultado que você espera.

 

Lembrando que esse resultado foi o que você me disse que queria.

Citar

image.thumb.png.fc4237090721c238daadf65d6306ecbf.png

 

aqui, lembrando apenas que para que fique exatamente igual você precisa realizar um ORDER BY pela data de abertura DESC (que é do mais recente para o mais antigo ou seja de 12/10 para 11/10 / 10/10 e diminuindo).

Citar

image.png.69f6ea93198e49488ef8601ed8f3206d.png

 

 

Bom, agora me diga, o que você está querendo fazer que não está conseguindo.

 

Fico no aguardo.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites
 

Olá Felipe, é exatamente o que você me mandou, funciona perfeito, só que além que fazer o while na coluna abertura, queria que fazer o while na coluna visita, porém quando altero para a coluna visita ele não agrupa como no código que você me mandou. Ele cria vários grupos com a mesma data como na imagem

Share this post


Link to post
Share on other sites

@heenrique

 

Para te falar a verdade nao entendi o que você está tentando fazer.

Você quer agrupar por DATA ABERTURA e também por DATA VISITA?

Coloque uma imagem de como você quer que fique para que a analise e a solução fique mais fácil.

 

Fico no aguardo.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites
Em 04/11/2019 at 09:09, Felipe Guedes Coutinho disse:

@heenrique

 

Para te falar a verdade nao entendi o que você está tentando fazer.

Você quer agrupar por DATA ABERTURA e também por DATA VISITA?

Coloque uma imagem de como você quer que fique para que a analise e a solução fique mais fácil.

 

Fico no aguardo.

 

Att.

Felipe Coutinho

 

@Felipe Guedes Coutinho

 

Olá, era burrice minha, eu nao estava formatando a data, por este motivo ele não agrupava, este é meu codigo final!

 

 <div id="atualizar" class="box-body">
      <?php
      //SELECTS
      $data_anterior = "";
      $result_os  = "SELECT * FROM sis_suporte WHERE tecnico = '$func' AND abertura < '$hoje' ORDER BY visita DESC";
      $resultado_os  = mysqli_query($mysqli, $result_os );
      while($dados = mysqli_fetch_assoc($resultado_os )) {
          if ((new DateTime($dados['visita']))->format('d/m/Y') != $data_anterior) {
		  
              echo "
			  <div style='border-radius: 3px; margin: 0 0 3px 0; padding: 2px 10px 0px 0px; text-align: right;' class='callout callout-info'>
					" .(new DateTime($dados['visita']))->format('d/m/Y'). "
              </div>			  
			  ";
          }
          $data_anterior = (new DateTime($dados['visita']))->format('d/m/Y');
          ?>
										<?php if ($dados['status'] == 'fechado'){ ?>
                                            <div class='row'>
                                                <div class='col-md-12'>
                                                    <a href='os.php?os=<?php echo $dados['chamado']; ?>'>
                                                        <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-aqua'><i style='padding-top: 35%;' class='ion ion-ios-gear-outline'></i></span>
                                                            <div class='info-box-content'> <span class='info-box-text'>
																<b>ABERTA</b></span> <span class='info-box-text'>
																<b>O.S:</b><?php echo $dados['chamado']; ?></span> <span class='info-box-text'>
																<b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'>
																<b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'>
																<b>DATA/HORA:</b><?php echo (new DateTime($dados['visita']))->format('d/m/Y - H:i'); ?></span> </a>
                                                    </div>
                                                    </div>
                                                    <?php 	}	if ($dados['status'] == 'aberto'){ ?>
                                                        <div class='row'>
                                                            <div class='col-md-12'>
                                                                <a href='os.php?os=<?php echo $dados['chamado']; ?>'>
                                                                    <div style='box-shadow: 3px 3px 0px 1px rgba(0,0,0,0.1);' class='info-box'> <span class='info-box-icon1 bg-green'><i style='padding-top: 35%;' class="fa fa-check" aria-hidden="true"></i></span>
                                                                        <div class='info-box-content'> <span class='info-box-text'>
																			<b>FINALIZADA</b></span> <span class='info-box-text'>
																			<b>O.S:</b><?php echo $dados['chamado']; ?></span> <span class='info-box-text'>
																			<b>NOME:</b><?php echo utf8_encode($dados['nome']); ?></span> <span class='info-box-text'>
																			<b>TIPO:</b><?php echo $dados['assunto']; ?></span> <span class='info-box-text'>
																			<b>DATA/HORA:</b><?php echo (new DateTime($dados['visita']))->format('d/m/Y - H:i'); ?></span> </a>
                                                                </div>
                                                                </div>
                                                                <?php } ?>
                                                            </div>
                                                        </div>
<?php } ?>

 

Assim você me ajudou muito! obrigado mesmo,

 

estou com um outro problema que é o seguinte:

 

tenho um while onde a div se atualiza automaticamente a cada 10 segundos, e gostaria que quando tivesse uma alteração na quantidade de linhas tocasse um bip, o bip tudo bem, sei como executar ele, por ex: as 9:00 tinha 3 o.s para o técnico, ai apareceu um encaixe, e foi direcionada para esse técnico, então são 4 o.s, quando a div atualizar automaticamente e ver que o resultado de agora é maior que o anterior emitir um bip mas a parte para comparar com a quantidade anterior não consegui, 

 

sera o mesmo método desse, ele compara a data anterior, nesse caso ele compararia as linhas anteriores ?

 

esse é o trecho do código:

				  <?php 
		$hoje = date("Y-m-d");
		$mi = '08:00:00';
		$mf = '13:00:00';
		$ti = '13:00:01';
		$tf = '18:00:00';
			      $result_os_tard = "SELECT * FROM sis_suporte WHERE tecnico = '$func' AND visita BETWEEN '$hoje $ti' AND '$hoje $tf' LIMIT 5";
		          $resultado_os_tard = mysqli_query($mysqli, $result_os_tard);				  
				  while($dados = mysqli_fetch_assoc($resultado_os_tard)){ 
?>	
                  <tr>
					<td><a href="os.php?os=<?php echo $dados['chamado']; ?>">
					<?php 
						if ($dados['status'] == 'aberto'){
						echo '<span class="label label-danger">Aberto</button>';
						}
						
						
						if ($dados['status'] == 'fechado'){
						echo '<button class="label label-success">Fechado</button>';
						}
					?>
					</a></td>				  
                    <td><a href="os.php?os=<?php echo $dados['chamado']; ?>"><?php echo mb_strimwidth(utf8_encode($dados['nome']), 0, 15, "..."); ?></a></td>
                    <td><a href="os.php?os=<?php echo $dados['chamado']; ?>"><?php echo strtoupper(mb_strimwidth(utf8_encode($dados['assunto']), 0, 4)); ?></a></td>
                    <td><a href="os.php?os=<?php echo $dados['chamado']; ?>"><?php echo mb_strimwidth(utf8_encode($dados['chamado']), 0, 15, "..."); ?></a></td>	
                  </tr>
				  <?php } ?>

 

Share this post


Link to post
Share on other sites

@heenrique

 

Realmente eu não sei como você vai fazer, mas a idéia que tive é você fazer um COUNT do total de O.S. do técnico em algum lugar no seu sistema "antes" dessa tela onde apresenta esse BIP que se auto-atualiza, então com o resultado do COUNT você joga em uma VARIÁVEL DE SESSÃO

 

SESSION_START();

$_SESSION['total_os_tecnico'] = $resultado_count['count(*)'];

 

Não sei onde você pode colocar isso, talvez no login, ou na index, mas precisa ser fora da página onde você tem essa div que se auto-atualiza como comentei.

 

Então o segredo é você fazer um OUTRO COUNT dentro dessa div para pegar a quantidade de O.S. do técnico e com esse resultado você comparar com o resultado da variável de sessão com o resultado, se for != (diferente) ou sei lá só > você pega o COUNT que fez dentro da DIV e joga dentro da variável de sessão e toca o seu BIP e problema resolvido.

 

Essa foi a solução que eu encontrei sem conhecer o seu sistema.

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Carcleo
      Estou começando no Laravel 11 e me deparei com um problema de belongsTo
       
      public function listOfClass(Request $request, StudentDisciplineClassroom $sdc) : ?string {         $all = $sdc::select('student')->with('studentRelation')->where('classroom',$request->classroom)->distinct('student')->get();     dd($all->toArray());     $students = [];     foreach ($all as $student) {             $students[] =$student;     }       return response()->json($students)->getContent();     } isso

      Em studentRelation temos na tabela StudentDisciplineClassroom com os campos

      id(chave primaria)
      ra (chave estrangera que referencia o campo academic_registration na tabela de students)

      e a tabela student tem os campos

      id (chave primária)
      academic_registration (que vai ser refeenciada na tabela StudentDisciplineClassroom

      Mas na hora de fazer
      $sdc::select('student')->with('studentRelation')->where('classroom',$request->classroom)->distinct('student')->get();
      O studentRelation retorna nulo

      Onde eu posso estar errando?
    • By joao b silva
      Tenho uma pequena aplicação em php que gera arquivos pdf com a MPDF e envia email com a PHPMAILER. De repente a app parou de enviar os emails  e apresenta a seguinte mensagem de erro:
       
      Error PHPMailer: SMTP Error: Could not authenticate.
       
      Faço uso de um hotmail para a configuração do PHPMAILER.
    • By violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos.
       
      Quando programava em DOS. utilizava algumas teclas de atalho para: SALVAR / EDITAR / EXCLUIR / IMPRIMIR.
      Por exemplo:
      Salvar ----> ALT+S
      Editar ----> ALT+E
      Excluir --> ALT+X
      Imprimir -> ALT+I

      no PHP tem como colocar esses ATALHOS nos button, para o usuário trabalhar com esses atalhos e como seria ?

      grato,
       
      Cesar
    • By violin101
      Caros Amigos, saudações.
       
      Por favor, me perdoa em postar uma dúvida.
       
      Preciso criar uma Rotina onde o usuário possa buscar na Base de Dados de Produtos, tanto por Código e Descrição, ou seja:
      - caso o usuário digita o Código, mostra os dados do Produto.
      - caso o usuário digita a Descrição, mostra os dados do Produto
       
      Fiz uma Rotina, onde o usuário digita a DESCRIÇÃO com a função AUTOCOMPLETE.    <=== está funcionando certinho.
       
      Minha dúvida é como faço para DIGITAR o Código e mostrar os dados também.
       
      o meu AutoComplete na MODEL está assim.
      public function autoCompleteProduto($q){ $this->db->select('*' ) ->from('produtos') ->where('produtos.statusProd',1) ->like('descricao', $q) ->limit(5) ->order_by('descricao', 'ASC'); $query = $this->db->get(); if ($query->num_rows() > 0) { foreach ($query->result_array() as $row) { $row_set[] = ['label' => str_pad($row['idProdutos'], '5', '0', STR_PAD_LEFT).' - '.$row['descricao'], 'id' => $row['idProdutos'], 'descricao' => $row['descricao'], 'cod_interno' => $row['cod_interno'], 'prd_unid' => $row['prd_unid'], 'estoque_atual' => $row['estoque_atual'] ]; } echo json_encode($row_set); } }  
       
      no CONTROLLER está assim:
      public function autoCompleteProduto() { $this->load->model('estoque/lancamentos_model'); if (isset($_GET['term'])) { $q = strtolower($_GET['term']); $this->lancamentos_model->autoCompleteProduto($q); } }  
       
      na VIEW está assim:
      <div class="col-md-10"> <label for="idProdutos">Produto:</label> <input type="hidden" name="idProdutos" id="idProdutos"> <input type="text" class="form-control" id="descricao" name="descricao" style="font-size:15px; font-weight:bold;" placeholder="Pesquisar por descrição do produto" disabled> </div>  
      VIEW + JAVASCRIPT
       
      //Função para trazer os Dados pelo o AutoComplete. function resolveAutocomplete() { $("#descricao").autocomplete({ source: "<?php echo base_url(); ?>estoque/lancamentos/autoCompleteProduto/", minLength: 2, select: function (event, ui) { $("#idProdutos").val(ui.item.id); $("#cod_interno").val(ui.item.cod_interno); $("#descricao").val(ui.item.descricao); $("#prd_unid").val(ui.item.prd_unid); $("#estoque_atual").val(ui.item.estoque_atual); $("#qtde").focus(); } }); } // inicia o autocomplete resolveAutocomplete();  
      Grato,
       
      Cesar
    • By belann
      Olá!
       
      Estou tentando criar um projeto laravel e está dando o seguinte erro 
      curl error 60 while downloading https://getcomposer.org/versions: SSL certificate problem: unable to get local issu
        er certificate
      Já tentei atualizar o composer, mas dá o mesmo erro acima.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.