Ir para conteúdo

Arquivado

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

Fábio BN

[Resolvido] [Resolvido] Como fazer um Select Count e Group By no PHP usando pdo?

Recommended Posts

Olá pessoal.

Preciso fazer um Select Count, e um Setect Count com Group By numa tabela para pegar a quantidade total de registros.
Exemplo:
 

$estoque = "1"
$var_total_geral=$pdo->prepare("select count(categoria) from loja_virtual WHERE estoque=:estoque");
$var_total_geral->bindValue(":estoque",$estoque);
$var_total_geral->execute();

Depois preciso pegar e exibir a quantidade total  do código acima, porém tem algum erro acima e não sei qual comando usar para exibir a quantidade total.

Depois preciso fazer outros select agrupado, onde eu preciso saber as quantidade de registros de cada categoria.
Exemplo:
Categoria 1 ( 40 Registros )
Categoria 2 ( 32 Registros )
Categoria 3 ( 18 Registros )

Tentei isso abaixo:

$var_quantidades=$pdo->prepare("select count(categoria) as total from loja_virtual WHERE estoque=:estoque group by categoria" );
$var_quantidades->bindValue(":estoque",$estoque);
$var_quantidades->execute();

Como eu faço esse código acima funcionar e como exibo as quantidade agrupadas?


Se alguém puder me ajudar, Obrigado!

 

Fábio.
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu resolvi o primeiro problema assim:

$estoque = 1;
$var_total_geral=$pdo->prepare("select categoria from loja_virtual WHERE estoque=:estoque");
$var_total_geral->bindValue(":estoque",$estoque);
$var_total_geral->execute();

$total_soma = $var_total_geral->rowCount();
echo $total_soma;

Agora só preciso descobrir como contar os registros agrupados.

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Rubens Ferreira de Couto
      Prezados Senhores,
      pelo codigo abaixo descrito consigo buscar na base de dados o que preciso, porém quando insiro em uma função a mesma consulta SQL, não me retorna os dados da mesma forma que diretamente na página porque a consulta só retorna 1 linha.
      ==primeiro codigo==
      require_once('config/dbconfig.php');
          include "functions.php";
          $contapd = 1;
          $mes = 2;
          $ano = 2015;
          $tipo = 1;
          $data_i = "2020-01-02";
          $data_f = "2020-01-18";    
          $pdo = new Database();
          $db = $pdo->dbConnection();
          
          //$stmt = $db->prepare("SELECT * FROM lc_movimento WHERE idconta='$contapd' and mes='$mes_hoje' and ano='$ano_hoje'");
          //$stmt = $db->prepare("SELECT * FROM lc_movimento WHERE month(datamov)='$mes_hoje' and year(datamov)='$ano_hoje' and idconta='$contapd'");
          $stmt = $db->prepare("SELECT idconta, DATE_FORMAT(datamov,'%m/%Y') AS ref, DATE_FORMAT(datamov,'%m') AS mes, DATE_FORMAT(datamov,'%Y') AS ano,
                              SUM(IF(tipo = 0, valor, 0)) AS debito,
                              SUM(IF(tipo = 1, valor, 0)) AS credito,
                              (SELECT SUM(IF(tipo = 1, valor, -valor)) FROM lc_movimento AS L2
                              WHERE DATE_FORMAT(lc_movimento.datamov,'%Y%m') >=
                              DATE_FORMAT(L2.datamov,'%Y%m') and
                              idconta = lc_movimento.idconta) AS saldo
                              FROM lc_movimento WHERE idconta =:contapd and mes=:mes and ano=:ano
                              GROUP BY idconta, MONTH(datamov), YEAR(datamov) ORDER BY YEAR(datamov), MONTH(datamov);");
          $stmt->bindparam(':contapd', $contapd );
          $stmt->bindparam(':mes', $mes );
          $stmt->bindparam(':ano', $ano );
          $stmt->execute();
          $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
          
          foreach($result as $linha){
              ?>
              <table border="1">
                  <th>Conta</th>
                  <th>Ref</th>
                  <th>Mes</th>
                  <th>Ano</th>
                  <th>Saldo Ant.</th>
                  <th>Debito</th>
                  <th>Credito</th>
                  <th>Saldo</th>
                  <tr>
                      <td><?php echo $linha['idconta']; ?> </td>
                      <td><?php echo $linha['ref']; ?> </td>
                      <td><?php echo $linha['mes']; ?> </td>
                      <td><?php echo $linha['ano']; ?> </td>
                      <?php $anterior = $linha['saldo'] + $linha['debito'] - $linha['credito']; ?>
                      <td><?php echo formata_dinheiro($anterior); ?> </td>
                      <td><?php echo formata_dinheiro($linha['debito']); ?> </td>
                      <td><?php echo formata_dinheiro($linha['credito']); ?> </td>
                      <td><?php echo formata_dinheiro($linha['saldo']); ?> </td>
                  </tr>
              </table>
          <?php     
           }
      ?>
      == desta forma está retornando corretamente ==
      Já dentro da função não retorna. Os dados de conexão da função estão corretos porque outras funções já estão retornando os dados.
      =========================== função saldo anterior ========================================================
      // FUNÇÃO PARA RETORNAR OS SALDO ANTERIOR, ENTRADAS, SAIDAS E SALDO ATUAL DO MÊS E ANO SELECIONADOS
          public function dados_saldo($idconta, $mes_hoje, $ano_hoje )
          {
              try
              {
                  $stmt = $this->conn->prepare("SELECT idconta, DATE_FORMAT(datamov,'%m/%Y') AS data, DATE_FORMAT(datamov,'%m') AS mes, DATE_FORMAT(datamov,'%Y') AS ano, SUM(IF(tipo = 0, valor, 0)) AS debito, SUM(IF(tipo = 1, valor, 0)) AS credito,(SELECT SUM(IF(tipo = 1, valor, -valor)) FROM lc_movimento AS L2 WHERE DATE_FORMAT(lc_movimento.datamov,'%Y%m') >=DATE_FORMAT(L2.datamov,'%Y%m') and idconta = lc_movimento.idconta) AS saldo FROM lc_movimento WHERE idconta =:contapd and mes=:mes and ano=:ano GROUP BY idconta, mes, ano ORDER BY ano, mes;");
                  $stmt->execute(array(
                  ':contapd'=>$idconta,    
                  ':mes'=>$mes_hoje,
                  ':ano'=>$ano_hoje));
                  
                  $result=$stmt->fetch(PDO::FETCH_ASSOC);
                  
                  return $result['data'];
              }
              catch(PDOException $e)
              {
                  echo $e->getMessage();
              }
          }
       
      O que está dando errado?
    • Por Felipe Guedes Coutinho
      Galera, venho contribuindo com diversas dúvidas, mas hoje quem está com uma dúvida sou eu.
       
      Cenário - Gerar Dados para Relatório de Faturamento.
      Objetivo - Obter os valores totais das tabelas de Compra, Venda e Despesa agrupados por mês através de SUM dentro do "periodo" passado pela tela de consulta do relatório.
      Problema - Não existe um relacionamento entre as tabelas e eu preciso obter os resultados por 1 (UM) único select pois a cada registro lido com os valores totalizados e agrupados por mês eu movimento para um array onde o resultado do array é movimentado para um Chart do Google que gera um gráfico.
       
      Insumos:
      Tabela compra

      RESULTADO SEPARADO DA TABELA COMPRA
      SELECT  sum(vlr_pago),
              CASE extract(MONTH from dt_registro_compra)
                  WHEN 1 THEN 'Janeiro'
                  WHEN 2 THEN 'Fevereiro'
                  WHEN 3 THEN 'Março'
                  WHEN 4 THEN 'Abril'
                  WHEN 5 THEN 'Maio'
                  WHEN 6 THEN 'Junho'
                  WHEN 7 THEN 'Julho'
                  WHEN 8 THEN 'Agosto'
                  WHEN 9 THEN 'Setembro'
                  WHEN 10 THEN 'Outubro'
                  WHEN 11 THEN 'Novembro'
                  WHEN 12 THEN 'Dezembro'
              END AS mes
              FROM db_pescado_gelo.sqltb_compra
              WHERE dt_registro_compra between '2019-01-01' and '2019-12-31'
      group by mes
      order by dt_registro_compra asc
       
      RESULTADO:

       
      Tabela Venda

      RESULTADO SEPARADO DA TABELA VENDA
      SELECT  sum(vlr_vale),
              CASE extract(MONTH from dt_registro_venda)
                  WHEN 1 THEN 'Janeiro'
                  WHEN 2 THEN 'Fevereiro'
                  WHEN 3 THEN 'Março'
                  WHEN 4 THEN 'Abril'
                  WHEN 5 THEN 'Maio'
                  WHEN 6 THEN 'Junho'
                  WHEN 7 THEN 'Julho'
                  WHEN 8 THEN 'Agosto'
                  WHEN 9 THEN 'Setembro'
                  WHEN 10 THEN 'Outubro'
                  WHEN 11 THEN 'Novembro'
                  WHEN 12 THEN 'Dezembro'
              END AS mes
              FROM db_pescado_gelo.sqltb_venda
              WHERE dt_registro_venda between '2019-01-01' and '2019-12-31' 
      group by mes
      order by dt_registro_venda asc
       
      RESULTADO:

       
      Tabela Despesa

      Sei que devo colocar dt_pagamento is not null
      RESULTADO SEPARADO DA TABELA DESPESA
      SELECT  sum(vlr_pago),
              CASE extract(MONTH from dt_pagamento)
                  WHEN 1 THEN 'Janeiro'
                  WHEN 2 THEN 'Fevereiro'
                  WHEN 3 THEN 'Março'
                  WHEN 4 THEN 'Abril'
                  WHEN 5 THEN 'Maio'
                  WHEN 6 THEN 'Junho'
                  WHEN 7 THEN 'Julho'
                  WHEN 8 THEN 'Agosto'
                  WHEN 9 THEN 'Setembro'
                  WHEN 10 THEN 'Outubro'
                  WHEN 11 THEN 'Novembro'
                  WHEN 12 THEN 'Dezembro'
              END AS mes
              FROM db_pescado_gelo.sqltb_despesa
              WHERE dt_pagamento between '2019-01-01' and '2019-12-31'
                AND dt_pagamento is not null
      group by mes
      order by dt_pagamento asc
       
      RESULTADO:

       
       
      O resultado que eu gostaria é algo parecido com isso:
       
      TABELA DE VENDA TABELA DE COMPRA TABELA DE DESPESA - - R$ 31.272,55 Julho - - Agosto R$ 3.796,53 R$ 20.687,20 Agosto R$ 3.796,53 Agosto  
      Esse resultado eu "preciso" que seja através do retorno do um único SELECT, se alguém puder me ajudar, ficarei muito agradecido.
       
      Se puderem dar uma forã agradeço @Motta ; @Omar~ ; @Maujor ; @gabrielms 
       
      Att.
      Felipe Coutinho
    • Por ronimarcos.silva
      Olá pessoal, preciso de uma ajuda de vocês. Não tenho muita experiência em SQL, creio que para vocês será fácil. Estou usando o banco de dados Oracle 12C.
      Supondo que tenho em meu banco 3 colunas, uma de conta de Débito, onde nesta coluna vai o código da conta de débito, uma de conta de Crédito, onde nesta coluna vai o código da conta de Crédito e uma de valor, que é informado o valor de cada lançamento a débito ou a crédito.
      Quando o lançamento for a débito, o valor da conta de crédito é igual a Zero (0) e inverso quando o lançamento for a débito, ou seja, se uma conta está preenchida é porque a outra não tem lançamento. Até aí tudo bém, posso totalizar o valor por cada conta de débito ou de crédito. Mas como faço se eu querer saber o total da conta de débito e o total da conta de crédito?
      Veja abaixo um exemplo:
       
      Select E640LCT.CtaDeb, E640LCT.CtaCre, sum(E210MVP.VLRMOV) as total from E210Mvp, E644Les, E640Lct where E644Les.CodEmp = E640Lct.CodEmp and E644Les.NumLct = E640Lct.NumLct and E644Les.CodEmp = E210Mvp.CodEmp and E644Les.CodPro = E210Mvp.CodPro and E644Les.CodDer = E210Mvp.CodDer and E644Les.CodDep = E210Mvp.CodDep and E644Les.DatMov = E210Mvp.DatMov and E644Les.SeqMov = E210Mvp.SeqMov and E210Mvp.CodEmp = 100 and E210Mvp.CodFil = 3 and E640LCT.OriLct = 'EST' and E640LCT.DatLct between '01/07/2019' and '31/07/2019' group by E640LCT.CtaDeb, E640LCT.CtaCre  

    • Por Ygor Guedes
      Boa tarde meu pessoal. Preciso da ajuda de vocês em uma consulta baseada em Inner Join + Group By. Irei deixar as tabelas e a consulta que eu tenho, para melhor visualização:
       
      Consulta: 
      SELECT tab_garagens.onibus_ponto, tab_garagens.onibus_prefixo, data FROM pontos INNER JOIN tab_garagens ON pontos.onibus_ponto = tab_garagens.onibus_ponto Tabela pontos:
      | onibus_ponto |                data                |
      |           10           |  2019-06-03 12:00:00 |
      |           10           |  2019-06-03 12:10:00 |
      |           44           |  2019-06-03 12:00:00 |
       
      Tabela tab_garagens:
      | onibus_ponto |  onibus_prefixo  |
      |           10           |      DE700            |
      |           44           |      GL030            |
       
      A minha consulta está trazendo a informação mais antiga da data; o que eu preciso é tipo um ORDER BY com data mais recente, onde eu pego a data mais atual do registro agrupado na coluna 'onibus_ponto'.
       
      Eu gostaria que saísse assim: 
       
      | onibus_ponto |  onibus_prefixo |             data                  |
      |        10              |       DE700          | 2019-06-03 12:10:00 |
      |        44              |       GL030          | 2019-06-03 12:00:00 |
       
      Se puderem me ajudar, fico agradecido
    • Por brunoogm
      Pessoal tenho uma tabela no php cujo resultado do select vindo do bd vem no seguinte formato:
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Bacon Cheddar                          1          60.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Chicken Club Sandwich            1          45.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Philly Cheese Steak                   1          50.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Smoke House                             1          55.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Stream Miller                              1          35.00
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
      E eu gostaria de fazer um select para que nao repita os dados iguais e que a tabela viesse assim:
       
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                                                                                      Bacon Cheddar                          1           60.00
                                                                                                                                                      Chicken Club Sandwich           1            45.00
      26    46        15/05/2019 13:57:25         Dinheiro                  Pendente                           Philly Cheese Steak                   1            50.00
                                                                                                                                                      Smoke House                             1            55.00
                                                                                                                                                      Stream Miller                              1            35.00
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
      Alguem pode me ajudar, qual seria a melhor forma de fazer ?

      Essa tabela é gerada com um while no php entao se alguem saber uma outra maneira de montar isso aceito dicas.
       
      php: 
      -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      echo "<tr role='row' class='odd'>";
                                                      echo "<td class='sorting_1'>" .$resultado['CodigoComanda']. "</td>";
                                                      echo "<td>" .$resultado['Nome']."</td>";
                                                      echo "<td>" .$resultado['Quantidade']."</td>";
                                                      echo "<td>" .$resultado['Preco']."</td>";
                                                      echo "<td>" .$resultado['Metodos']."</td>";
                                                      echo "<td>" .$resultado['DataPedido']."</td>";
                                                      echo "<td>" .$resultado['Situacao']."</td>";
      echo "</tr>";
      -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
      vlw pessoal
       
×

Informação importante

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