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 Joob
      Boas Malta,
       
      Não sei porquê que não estou a conseguir remover os ficheiros após minutos..
      Por exemplo ele vai buscar o delete_expired_shared_links e apaga a partilha feita após o tempo colocado, mas no delete_old_zips já não apaga.
      Supostamente ele vai buscar os ficheiros da pasta zip e deveria apagar.
       
      protected function schedule(Schedule $schedule) { $schedule->call(function () { $this->delete_expired_shared_links(); })->everyMinute(); $schedule->call(function () { $this->delete_old_zips(); })->everyFiveMinutes(); // Run queue jobs every minute $schedule->command('queue:work --stop-when-empty') ->everyMinute() ->withoutOverlapping(); } protected function delete_old_zips(): void { $zips = Zip::where('created_at', '<=', Carbon::now()->subDay()->toDateTimeString())->get(); $zips->each(function ($zip) { \Storage::disk('local')->delete('zip/' . $zip->basename); $zip->delete(); }); } protected function delete_expired_shared_links(): void { $shares = Share::whereNotNull('expire_in')->get(); $shares->each(function ($share) { $created_at = Carbon::parse($share->created_at); if ($created_at->diffInHours(Carbon::now()) >= $share->expire_in) { $share->delete(); } }); } }  
      Obrigado :)
    • By clayton.lima2020
      Boa Tarde!
       
      Pessoal estou com um problema para resolver:
       
      Tenho um uma string que é um Nome:  SYLVIA
       
      Eu preciso fazer uma uma busca nessa string achar a letra Y e depois verificar se após a letra Y a próxima letra é Vogal ou Consoante.
       
      No caso do nome SYLVIA a próxima letra é L então retorna Consoante.
       
      Alguém sabe montar esse algoritmo ai?
    • By Duilio Gomes Pereira
      Tenho um banco de dados com mais de 21 mil usuários do wordpress. Como faço para deletar os usuário no  Phpmyadmin e deixar apenas 2 usuários?
       
      Pois só preciso de 2 usuários neste site.
       
      Obrigado!
    • By biakelly
      Oi, estou estudando e ao mesmo tempo criando skill Alexa com PHP, nos testes funciona bem ela responde, mas ao tentar enviar para distribuição para testar na echo gera erro:
       
       
      Meu código é bem simples:
      <?php $arrbia = json_decode(file_get_contents("php://input"), TRUE); $strRequesbia = $arrbia["request"]["type"]; switch ($strRequestbia) { case "LaunchRequest": $arrResponse = [ "version" => "1.0", "response" => [ "outputSpeech" => [ "type" => "PlainText", "text" => "Olá bia, seja bem-vinda!" ], "shouldEndSession" => true ] ]; break; } header('Content-Type: application/json;charset=UTF-8'); echo json_encode($arrResponse); die(); Subi o arquivo para um dominio com SSL, o endereço do endpoint esta correto, mas sempre que tento enviar para distribuição, gera o erro mencionado acima.
       
      Vocês ja trabalharam com Alexa Usando PHP? Poderiam me ajudar resolver essa questão?
    • By mikuzuhara
      Olá, boa tarde,
       
      Estou implementando uma função de editar registro de um banco de dados MySQL utilizando a linguagem PHP com MySQLi. Quando clico no link editar, ele vai para uma página de edição e gostaria de imprimir os valores das colunas do registro a editar nos respectivos campos do formulário em HTML. Veja o código da página abaixo:
       
      <?php include_once('conexao.php'); $id = $_GET['id']; $pesquisa = "SELECT * FROM alunos WHERE id = '$id'"; $resultado = mysqli_query($conexao, $pesquisa); $registro = mysqli_fetch_array($resultado); $nome = $registro['nome']; $curso = $registro['curso']; mysqli_close($conexao); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Cadastro de alunos</title> </head> <body> <h3>Cadastro de novos alunos</h3> <form action="proc_edicao.php" method="POST"> <label>Nome: <input type="text" name="nome" placeholder="Digite o nome aqui" value="<?php echo $nome; ?>"> </label> <br><br> <label>Curso: <input type="text" name="curso" placeholder="Digite o nome aqui" value="<?php echo $curso; ?>"> </label> <br><br> <input type="submit" value="Cadastrar"> </form> </body> </html> Aparentemente, não há nada de errado com o conteúdo de value, mas rodando no servidor local nos campos Nome e Curso aparece exatamente o código como está escrito (<?php echo $nome; ?>) e não o conteúdo da variável $nome (o mesmo acontecendo para o campo Curso).
      Pesquisei na internet sobre isso, e em tudo que encontrei se refere a essa codificação de value como correta.
      O PHP 8.0 trabalha de outra forma? Quem puder esclarecer essa dúvida, agradeço.
       
      Aguardo retorno.
       
      Obrigado,
       
×

Important Information

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