Ir para conteúdo
Ross Risso

[Resolvido] consulta com várias condições

Recommended Posts

Tenho uma tabela pedidos com o campo forma de pagamento -  formpag - ele é uma combox que o usuário escolhe se o pagamento vai ser em dinheiro ou ou depósito em banco, na hora de criar o pedido.

Nessa tabela também existe o campo total. O que necessito é buscar em uma consulta o total de todos os pedidos e mostrar separadamente na mesma consulta o total em dinheiro e em depósito.

$qr="SELECT dataped, formpag, total  FROM tblpedidos  GROUP BY MONTH(dataped)";
$sqli=mysqli_query($conn,$qr);
while($ln = mysqli_fetch_assoc($sqli)){}

Como faço para obter a soma de "total" quando? Exemplo:

JANEIRO  quando formpag for dinheiro - total em dinheido - quando formpag for depósito - total em depósito.

JANEIRO total em dinheiro $ 100,00 - total em depósito $ 50,00. E assim por diante: FEVEREIRO, MARÇO e etc.

espero ter sido claro. Agradeço a atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, muito obrigado por sua atenção. Já tentei fazer com CASE mas me falta conhecimento. Vou dar uma olhada na dica que você passou e tentar resolver. Espero conseguir, caso contrário vou recorrer aqui novamente. Muito obrigado e boa noite!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acredito que para resolver esse problema tenho que criar variáveis. Não sei como fazer. Abaixo tentarei mostrar o que necessito com mais clareza:

<?php
$qr="SELECT formpag, dataped, total,
    (CASE WHEN [formpag] = 'dinheiro' THEN @d = SUM(total) ELSE 0 END)
    (CASE WHEN [formpag] <> 'dinheiro' THEN @b = SUM(total) ELSE 0 END)
    FROM tblpedidos
    GROUP BY MONTH(dataped)"
    $sqli=mysqli_query($conn,$qr);
    while($ln = mysqli_fetch_assoc($sqli)){
      
      $data = $ln['dataped'];
      $d=$ln['@d']; //Aqui o total quando formpag for 'dinheiro'
      $b=$ln['@b']; //Aqui o total quando formpag for diferente de 'dinheiro'
 
      echo $data;
      echo $d;
      echo $b;
     
 
    }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio ser esta a sql base

 

SELECT formpag, 
       dataped, 
       sum(total) total_geral,
       sum(CASE WHEN [formpag] = 'dinheiro' THEN total ELSE 0 END) dinheiro,
       sum(CASE WHEN [formpag] <> 'dinheiro' THEN total ELSE 0 END) outros
FROM tblpedidos
GROUP BY formpag, dataped 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu uso o CASE não me retorna nenhum resultado. Tentei fazer diversas modificações mas não obtive sucesso. Primeiro acho que dataped teria que ser representado por MONTH(dataped), mas mesmo assim não funcionou. Se eu obtivesse pelo menos o "total" da condição formpag='dinheiro', eu teria o outro resultado subtraindo total_geral menos o resultado obtido dessa condição.

Mas o ponto principal é que o CASE não me retorna nenhum resultado.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido Motta

Muito obrigado pela sua ajuda!

<?php
$qr="SELECT formpag, 
            dataped, 
            sum(total) total_geral,
            SUM(CASE WHEN formpag <> 'Dinheiro' THEN total ELSE 0 END) banco,
            SUM(CASE WHEN formpag = 'Dinheiro' THEN total ELSE 0 END) dinheiro
         
FROM tblpedidos
WHERE   YEAR(dataped)=YEAR(NOW())
GROUP BY MONTH(dataped)"
    $sqli=mysqli_query($conn,$qr);
    while($ln = mysqli_fetch_assoc($sqli)){
 
      $total_geral=$ln['total_geral'];
      $dataped = $ln['dataped'];
      $dinheiro=$ln['dinheiro'];
      $banco=$ln['banco'];
 
      echo utf8_encode(ucwords(strftime('%B, %Y'strtotime($dataped)))) . "<br>";
      echo "Total: " . $total_geral . "<br>";
      echo "Banco: " . $banco . "<br>";
      echo "Dinheiro: " . $dinheiro . "<br><br>";
 
    }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por gersonab
      Boa noite a todos, gostaria da ajuda de vcs, tenho um loop while dentro de uma janela modal, eu preciso q este seja dividido em duas colunas, pois esta ficando um pouco extenso, este lista opções que tenho no BD, fazendo os checkbox.
      estrutura .
      <div class="row"> <div class="col-md-12 ml-auto"> <label for="recipient-name" class="col-form-label">Opções:</label> <?php $curc4 = $pdo->query("SELECT * FROM opcoes ORDER BY opcao asc"); while ($lic4 = $curc4->fetch(PDO::FETCH_ASSOC)) { ?> <div class="checkbox-dark m-squar"> <input type="checkbox" name="opcao[]" id="opcao" value="<?php echo $lic4['opcao']; ?>"> <label class="mt-0" ><?php echo $lic4['opcao']; ?></label> </div> <?php } ?> </div> </div> no momento com 22 itens cadastrados, gostaria de mostrar duas colunas de 11 itens, desde já agradeço.
    • Por gersonab
      Boa tarde.
      estou com dificuldades para formar uma lógica, tenho um sistema onde faço o cadastro de parcelas conforme pedido pelo cliente, até aí sem problema, só que, só que se na hora o cliente resolver fazer à vista , eu não consigo editar, pois o número de parcelas seriam 0.
      <?php if(($parcpg === 0 ) || ( $parcpg === '')){ // caso não tenha parcela $valorparcelado = 0; } elseif (($jurospg === 0) || ($jurospg === '')){ // caso não tenha juros $valorparcelado = $valent / $parcpg; // caso parcela seja 0 ou nula dá erro aqui } else { $jurospg1 = $jurospg / 100; $nump = ($parcpg * 30); $nump4 = $nump + 30; $nump2 = $nump4 / 2; $nump22 = ($jurospg1 / 30) * $nump2; $valormedio = $nump22 * $valent; $valente = $valent + $valormedio; $valorparcelado = $valente / $parcpg;// caso parcela seja 0 ou nula dá erro aqui } ?> o erro só ocorre na edição.
       
    • Por gersonab
      Boa tarde
      tenho uma tabela com alguns itens e seus respectivos valores, preciso atualizar esses valores caso necessite.
      tipo:
      id - tip - descricao - valor
      1 -  1   - descrição - 2,00
      2 -  1   - descrição -12,00
      3 -  1   - descrição - 22,00
      4 -  2   - descrição - 2,00
      5 -  2   - descrição - 2,00
      6 -  2   - descrição - 2,00
       
      o  que eu quero fazer é atualizar conforme o tip , por exemplo , atualizar os valores do tip = 1 em 15%, assim ele atualizaria todos do tip 1 em 15%
    • Por gersonab
      utilizo um script para fazer upload de vários arquivos, só que agora foi solicitado para zipar o mesmo ao fazer o upload, pra ser sincero ja verifiquei vários tutoriais e não estou conseguindo.
      segue o script do upload funcionando sem o zip
       
      <?php if (!isset($_SESSION)) session_start(); require_once('config.php'); error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED); $idpr=$_POST['idpr']; $fotoprof=$_POST['fotoprof']; $foproc=$_POST['foproc']; $diretorio = "../files/"; $arquivo = $_FILES['foto']; for ($controle = 0; $controle < count($arquivo['name']); $controle++){ $nome = ($idpr."-P-".$arquivo['name'][$controle]); $values .= " ('{$nome}', '{$fotoprof}', '{$idpr}'),"; $destino = $diretorio."/".$idpr."-P-".$arquivo['name'][$controle]; move_uploaded_file($arquivo['tmp_name'][$controle], $destino); } $values=substr($values, 0, -1); $sql_fotos = "INSERT INTO fotos ( foto, fotoprof, fotoidpr ) VALUES $values"; //executa a query $executa = mysqli_query($con,$sql_fotos); ?> desde já agradeço qq ajuda.
    • Por celsomacarini
      Olá, estou com uma dúvida, como que eu faço para mandar a data e a hora atualizada para o meu banco? O código esta assim
      FUNÇÃO DE ADICIONAR
      public function adicionarSolicitacao($usuario = '', $assunto ='', $data ='', $hora ='') { if($this->existeEmail($email) == false) { $sql = "INSERT INTO solicitacao (usuario, assunto, data, hora) VALUES (:usuario, :assunto, :NOW(), :NOW())"; $sql = $this->pdo->prepare($sql); $sql->bindValue(':usuario', $usuario); $sql->bindValue(':assunto', $assunto); $sql->bindValue(':data', $data); $sql->bindValue(':hora', $hora); $sql->execute(); return true; } else { return false; } }
      ARQUIVO SUBMIT
       
      <?php include '../classes/ramal.class.php'; $contato = new Contato(); if(!empty($_POST['usuario'])){ $usuario = $_POST['usuario']; $assunto = $_POST['assunto']; $data = $_POST['data']; $hora = $_POST['hora']; $contato->adicionarSolicitacao($usuario, $assunto, $data, $hora); header("Location: index_servico.php"); }else{ header("Location: index_servico.php"); } ?> ARQUIVO DO FORMULÁRIO <div class="container"> <form name="formCadastro" method="POST" action="nova_solicitacao_submit.php"> <div class="form-row"> <div class="form-group col-md-6"> <fieldset disabled> <label for="inputEmail4">Nome do Usuário</label> <input type="text" class="form-control" name="usuario" value="<?php echo $_SESSION['usuarioNome']; ?>"> </div> </fieldset> <div class="form-group col-md-6"> <label for="inputState">Assunto</label> <select id="inputState" class="form-control" name="assunto"> <option selected>Impressoras</option> <option>EP-Específico Pormade</option> <option>Fluig</option> <option>Internet</option> <option>Logix</option> <option>Maker</option> <option>Office</option> <option>Inline</option> <option>Senhas</option> <option>SIMP</option> <option>Telefonia</option> <option>Terceiros</option> <option>Windows</option> <option>Backup</option> <option>CEDEPH</option> <option>Computadores</option> <option>CRM</option> <option>E-Mail</option> <option>Empréstimo de Equipamentos</option> <option>Formatação</option> <option>Outros</option> </select> </div> </div> <div class="input-group"> <div class="input-group-prepend"> <span class="input-group-text">Qual é o problema?</span> </div> <textarea class="form-control"></textarea> </div><br> <input class="btn btn-primary" type="submit" value="Enviar"> <a href="nova_solicitacao_submit.php" class="btn btn-info" role="button">Voltar</a> </div> </div> </form> </header> </body>  
×

Informação importante

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