Ir para conteúdo

POWERED BY:

Arquivado

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

William Espindola

[Resolvido] Tabela Dinamica

Recommended Posts

Ola pessoal, alguém poderia me dar uma luz de como fazer esta seguinte tabela?

 

tem que funcionar da seguinte maneira:

 

Os dados viram de duas tabelas, onde trará o nome de uma tabela e contará a quantidade de chamados em outra correspondente ao id da primeira, o resultado tem que ser assim como na imagem, igual a uma tabela dinâmica no Excel.

 

Picture%2026.png

 

 

Até agora esta tentando com array, mas já estou ficando louco e ainda não saiu nada.

 

Desde ja agradeço a força! :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou seja, tu quer fazer uma Query que puxe dados de duas tbls ?

 

tb_a

id tb_b_id nome quantidade
1   1      carro  100
2   2      tenis  50

tb_b

id tipo
1   automovel
2   calçado

SELECT COUNT(quantidade) AS soma FROM tb_a INNER JOIN tb_b ON (tb_a.tb_b_id = tb_b.id);

 

Aqui tu esta mandando buscar tudo da outra tabela que exista na chave estrangeira da tb_a.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não pegar dados de duas tabelas é tranquilo, o problema principal aqui é montar a tabela com os dados com de cada linha sempre correspondentes aos dados da primeira coluna(onde o id for iqual a tal).

 

Outro impecilho é o seguinte, os resultados das colunas chamados abertos, pendentes, Encerrados e Cancelados, serão sempre da mesma tabela, o que determina cada um deles é o WHERE. Mas como pegar vários status direfentes de uma unica consulta consulta?

 

Por exemplo a query que estou usando:

 

"SELECT

usu.usu_nome,

COUNT(cha.cha_id) AS cont_cha

FROM tbl_usuarios AS usu

INNER JOIN tbl_chamados AS cha ON cha.usu_id_cha_abertura = usu.usu_id

WHERE 1 AND cha_dataAbertura BETWEEN ('".$dt_de."') AND ('".$dt_a."') AND usu_id_cha_abertura = '".$_POST["usu_id"]."' AND cha_status = 'A' GROUP BY usu_nome ORDER BY cont_cha ASC";

 

Aqui "cha_status = 'A'": estre cara tera que mudar de acordo com cada coluna "C" Cencelado "E" encerrado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo, vamos dizer que tu vai fazer algo por GET

 

?tip=C

$tipo = $_GET["tipo"];

"SELECT
usu.usu_nome,
COUNT(cha.cha_id) AS cont_cha
FROM tbl_usuarios AS usu
INNER JOIN tbl_chamados AS cha ON cha.usu_id_cha_abertura = usu.usu_id
WHERE 1 AND cha_dataAbertura BETWEEN ('".$dt_de."') AND ('".$dt_a."') AND usu_id_cha_abertura = '".$_POST["usu_id"]."' AND cha_status = '{$tipo}' GROUP BY usu_nome ORDER BY cont_cha ASC";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa este ai eu não conheço!

 

Vamos la, mas eu consigo trazer os valores separados?

EX:

SELECT nome,status

WHERE tipo IN ('A','B','C');

 

resultado:

status A

status B

status C

 

Pois cara um estará em uma coluna entendeu a bagunça?

Compartilhar este post


Link para o post
Compartilhar em outros sites

no SELECT

 

tipo

 

"SELECT
usu.usu_nome,
cha.nome AS chamada,
COUNT(cha.cha_id) AS cont_cha
FROM tbl_usuarios AS usu
INNER JOIN tbl_chamados AS cha ON cha.usu_id_cha_abertura = usu.usu_id
WHERE 1 AND cha.cha_dataAbertura BETWEEN ('".$dt_de."') AND ('".$dt_a."') AND usu.usu_id_cha_abertura = '".$_POST["usu_id"]."' AND cha.cha_status = '{$tipo}' GROUP BY usu.usu_nome ORDER BY cha.cont_cha ASC";

echo $reg["chamada"];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi, como seria outro campo no lugar no cha.nome?

 

Da tabele de chamados eu preciso contar quantos estão esta cada Status: A, P, E, C

 

Utilizando aquele

WHERE tipo IN ('A','B','C')

 

Será que nos conseguimos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por um acaso tu já testou usando tanto o COUNT quanto o IN ?

 

faça um teste...

 

"SELECT
usu.usu_nome,
COUNT(cha.cha_id) AS cont_cha
FROM tbl_usuarios AS usu
INNER JOIN tbl_chamados AS cha ON cha.usu_id_cha_abertura = usu.usu_id
WHERE 1 AND cha.cha_dataAbertura BETWEEN ('".$dt_de."') AND ('".$dt_a."') AND usu.usu_id_cha_abertura = '".$_POST["usu_id"]."' AND cha.cha_status = '{$tipo}' GROUP BY usu.usu_nome ORDER BY cha.cont_cha ASC";

 

atribua-a valores para as variaveis e pesquise tanto no phpmyadmin quando no sqlyog, ou outro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta ai galera, vamos a solução do problema :clap:

 

gremio10 Obrigado pela força!

 

O problema era o seguinte, fazer uma tabela dinâmica onde os valores impresso de cada coluna, estas com 4 status mais total e usuários, sendo os valores de cada status a contagem equivalente a quantidade comparativa ao ID de cara usuário. Complicou?

 

Vamos ao código:

<table>
       <tr>
           <td><h3> Controlador </h3></td>
           <td style="background-color: #66FF99"><h3> Abertos </h3></td>
           <td style="background-color: #FF8080"><h3> Pendentes </h3></td>
           <td style="background-color: #999999"><h3> Encerrados </h3></td>
           <td style="background-color: burlywood"><h3> Cancelados </h3></td>
           <td><h3> Total </h3></td>
       </tr>
   <!-- Cabeçaros -->

<?php
   $query = "SELECT
   IFNULL(usu.usu_nome,'Totals') AS usu_nome,
       COUNT(if(cha.cha_status = 'A', cha.cha_status, NULL)) AS 'Abertos',
       COUNT(if(cha.cha_status = 'P', cha.cha_status, NULL)) AS 'Pendentes',
       COUNT(if(cha.cha_status = 'E', cha.cha_status, NULL)) AS 'Encerrados',
       COUNT(if(cha.cha_status = 'C', cha.cha_status, NULL)) AS 'Cancelados',
       COUNT(if(cha.cha_status = 'A', cha.cha_status, NULL)) +
       COUNT(if(cha.cha_status = 'P', cha.cha_status, NULL)) +
       COUNT(if(cha.cha_status = 'E', cha.cha_status, NULL)) +
       COUNT(if(cha.cha_status = 'C', cha.cha_status, NULL)) AS 'TotalCol'
       FROM tbl_usuarios AS usu
       INNER JOIN tbl_chamados AS cha ON cha.usu_id_cha_abertura = usu.usu_id
       WHERE 1 ";

//... Aqui neste trexo avia mas alguns códigos de filtro por data e usuário, mas este não é o foco ...

   $query .= " GROUP BY usu.usu_nome WITH ROLLUP ";

   $result = mysql_query($query);
   $resultCont = mysql_num_rows($result);
   echo $resultCont;
   $cont = 1;
   while($row = mysql_fetch_array($result)){
       $cor = ($cont == $resultCont) ? '#CCCCCC' : '#FFFFFF';
       echo "<tr><td style='background-color: $cor'> $row[usu_nome] </td>";
       echo "<td style='background-color: $cor' align='center'>$row[Abertos]</td>";
       echo "<td style='background-color: $cor'align='center'>$row[Pendentes]</td>";
       echo "<td style='background-color: $cor'align='center'>$row[Encerrados]</td>";
       echo "<td style='background-color: $cor'align='center'>$row[Cancelados]</td>";
       echo "<td style='background-color: $cor'align='center'>$row[TotalCol]</td></tr>";
       $cont ++;
   }// agora é impresso os valore das contagem em cada coluna
}
?>
   </table>

 

Picture%2027.png

 

Esta bom já se não isto vai virar um Tutorial heheh, mas caso algém tiver duvida e se interesar a usar, apanhei bastante com este posso ajundar.

 

AAA mais uma coisa o site onde achei Clique aqui.

 

Abraços valeu pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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