Ir para conteúdo

POWERED BY:

Arquivado

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

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>

 

Compartilhar este post


Link para o post
Compartilhar em outros 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 ?

Compartilhar este post


Link para o post
Compartilhar em outros 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 ?

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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!

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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 } ?>

 

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
×

Informação importante

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