Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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>@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***>
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 ?>
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 ?@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:

Fico no aguardo.
Att.
***Felipe Coutinho***>
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:

Fico no aguardo.
Att.
***Felipe Coutinho***
Olá Felipe, tentei tentei mas nao consegui,
Esta é a estrutura da tabela:

Ao executar o comando
SELECT * FROM sis_suporte GROUP BY DATE(abertura) ORDER BY visita ASC
ele me retorna:

ao executar:
SELECT * FROM sis_suporte
Retorna:
/applications/core/interface/imageproxy/imageproxy.php?img=&key=28afbb360db5c1b91c7f9cf48ddca8db0e348b5a600473bceae10c41869c0945" alt="" data-imageproxy-source="" />
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:

agradeço pela ajuda!@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***@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***>
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>

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
@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
/monthly_2019_10/image.thumb.png.fc4237090721c238daadf65d6306ecbf.png" data-fileid="4797" />
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
/monthly_2019_10/image.png.69f6ea93198e49488ef8601ed8f3206d.png" data-fileid="4795" />
Bom, agora me diga, o que você está querendo fazer que não está conseguindo.
Fico no aguardo.
Att.
Felipe Coutinho
@Felipe Guedes Coutinho
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
@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
Cara era o que eu estava procurando para algumasalteraçõesemmeu site,muito grato. qnax.com.br
>
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 } ?>@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***
Agrupa a nível de SQL, usando Group By
http://bit.ly/2MrZNoW