Jump to content
Renato Muniz

Melhor prática? criam campo Total ou fazer um join sum()?

Recommended Posts

Olá pessoal , sempre nas minhas tabelas nunca criei campo Total, nos casos tipo... tabela_venda e tabela_pedidos, o que eu faço é um join somando os campos valor*quantidade

daí é criado um campo "temporario" (Total)... correto?? pois bem, agora programando em java (spring) + JPA me deparei com problemas na hora de criar minhas classes anotadas como @Entity, pois esse campo "temporario" ta difícil de manipular na classe, pois na hora de persistir no banco ele o "JPA" tenta gravar esse campo "Total" tbm. Existe uma tag @transient  que inibe essa persistência no banco, ele retira da serialização, porém tbm nao consigo visualizar o conteúdo dele na view (no HTML), ou seja, ele nao carrega nos métodos get() vem sempre null!!

sei aqui é relacionado a banco de dados e acabei falando mais da linguagem do que o próprio banco, mas voltando ao assunto...

 

Vocês preferem criar o campo Total da tabela e assim ter a preocupação de sempre atualizar o campo ao incluir ou editar um valor da tabela Pedidos , ou preferem fazer um JOIN executando um SUM(), dessa forma nao precisando se preocupar com atualizações na tabela Vendas????

 

Citação

Certamente com o Join perco um pouco de performance, ou outro lado tenho a preocupação de ta atualizando o campo (total)

 

com o zendFramework (PHP) eu nao tinha problema nenhuma fazia o que queria "mandava e desmandava" :D  mas no "Spring" a coisa mudou!!

 

Qual a preferencia de vcs!! ??

 

obrigado!

Renato Muniz.

Share this post


Link to post
Share on other sites

Acredito que no seu caso seja melhor o campo Total, com mais fácil manipulação

Share this post


Link to post
Share on other sites
2 horas atrás, AmaandaSantos3 disse:

Acredito que no seu caso seja melhor o campo Total, com mais fácil manipulação

 

Obg por responder Amaanda, acho q assim seria mais complicado de manter nao?? me preocupar em atualiza o campo total , sempre que houver um insert ou update na tabela de produtos, apesar que na classe entity tem as tags preupdate e preinsert dai eu poderia tentar calcular e etc... mas da forma q implementei ficaria ruim dessa forma.

Obg

Share this post


Link to post
Share on other sites
16 hours ago, Renato Muniz said:

 

Obg por responder Amaanda, acho q assim seria mais complicado de manter nao?? me preocupar em atualiza o campo total , sempre que houver um insert ou update na tabela de produtos, apesar que na classe entity tem as tags preupdate e preinsert dai eu poderia tentar calcular e etc... mas da forma q implementei ficaria ruim dessa forma.

Obg

 

Eu pensei nessa forma, porque você pode perder esse dado com esse campo temporário, se seu sistema crescer, então uma forma de não perder esse dado seria criar ele real, mas aí se for uma coisa pequena usa o sum(), faz um teste com os dois, o que ficar melhor na sua necessidade usa, eu faço isso sempre, ajuda a saber o que realmente necessita 

 

Ps... Pesquisa mais sobre campos temporários e tabelas temporárias, que você pode achar um jeito de não perder esse dado, e usar o sum(), mas faz o teste que te falei ... :3 

Share this post


Link to post
Share on other sites
18 horas atrás, AmaandaSantos3 disse:

Acredito que no seu caso seja melhor o campo Total, com mais fácil manipulação

Oi Amanda, consegui contornar separando as tabelas mesmo, tirei o join da tabela "PAI" e fiz um filtro separado com a tabela "FILHA"

daí no controller deu FOR ( entity) somando manualmente e depois dei um setTotal() e enviei pra View. o que mudou pra ficar mais pesado é quantidade de vezes que preciso ir no banco de dados, com o join era uma instrução só!!

por enquanto vou deixar assim, pra dar continuidade no projeto, mas depois vou melhorar esse trecho!!

Obg!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By blbvicente
      Olá amigos, gostaria de tirar uma dúvida para o andamento do meu projeto de conclusão de curso.
       
      Como posso fazer um código para alterar imagens no banco de dados via PHP e utilizando o MySQL com ambiente de admin?
       
      Como meu HTML e CSS estão prontos, (tanto a home quanto a página de login para o admin) a ultima parte que falta é conseguir fazer isso que lhes estou pedindo ajuda hahaha
       
      Desde já agradeço a ajuda! 
    • By granderodeo
      Olá, tenho uma tabela chamada products, com uma coluna chamada categorias. Dentro da coluna 'categorias' tenho produtos com categorias distintas como 'bebidas', 'doces', 'salgados', etc. Quero que o php retorne apenas os produtos com o categoria 'bebidas' isso é possível, ou devo criar uma tabela para cada categoria? No momento estou usando o código abaixo, mas ele me retorna todos os produtos, e eu só quero aqueles de determinada categoria.
       
      <?php $sql="SELECT * FROM product"; $result=$conn->query($sql); while($row=$result->fetch_assoc()){ ?> <div class="col-sm-6 col-md-4 col-lg-3 mb-2"> <div class="card-deck"> <div class="card p-2 border-secondary mb-2"> <img src="<?= $row['product_image']; ?>" class="card-img-top"> <p class="text-center"> <?= $row['product_name']; ?><br> </p> <h4 class="card-title text-center">Por : R$<?= $row['product_price'] ?></h4> <form accept-charset="utf-8" action="" class="form-submit"> <input type="hidden" class="pid" value="<?= $row['id'] ?>"> <input type="hidden" class="pname" value="<?= $row['product_name'] ?>"> <input type="hidden" class="pprice" value="<?= $row['product_price'] ?>"> <a href=""><input type="hidden" class="pimage" value="<?= $row['product_image'] ?>"></a> <input type="hidden" class="pcode" value="<?= $row['product_code'] ?>"> <button class="btn btn-success btn-block addItemBtn"><i class="fa fa-shopping-cart"></i> Adicionar ao Carrinho</button> </form> </div> </div> </div> <?php } ?>  
    • By douglas79
      Boa noite pessoal,
      Estou seguindo um livro em PHP,  existe um campo pra inserir a imagem de um determinado produto. Fiz um formulário como teste e juntei uns códigos que achei na internet e até está dando certo, os dados estão indo pro BD. Mas tenho duas dúvidas e queria a ajuda do pessoal. Uma é colocar a sequencia nas fotos quando cadastrados (exemplo foto01, foto02 .... foto n) e ao inserir a imagem que é somente pode imagem com a suas extensões e uma mensagem informando.

      Eis o código:
       
      <?php
      include "conn.php";
      $nome = $_POST['nome'];
      $email = $_POST['email'];
      $foto = $_FILES['foto'];
      $pasta = "img/";

      $sql = "INSERT INTO cad (nome,email,foto) VALUES ('".$nome."','".$email."','".$_FILES['foto']['name']."')";
      mysql_query($sql,$con);
      $nome_final = time(). '.jpg';
      if (move_uploaded_file($foto['tmp_name'], $pasta . $nome_final)) {
          
          header("location:index.php");
      } else {
          echo "Erro";
      }
      ?>
      Aguardo as ajudas, desde já obrigado! []'s
    • By Hugo_Santos
      Preciso fazer uma consulta em um banco com 7 milhões de registros, mais precisamente 7.387.951 milhões, já adicionei as devidas index porém continua muito lento, será que alguem poderia me ajudar?
       
       
      SELECT a.nome_candidato,a.numero_cand,a.sigla_partido,SUM(a.total_votos) as total_votos,a.ds_tot_turno FROM votacao_candidato a WHERE a.ds_cargo='Deputado Estadual' AND a.sigla_uf='SP' AND a.nome_municipio='santos' AND a.desc_sit_candidato='DEFERIDO' GROUP BY a.sq_candidato ORDER BY a.total_votos DESC LIMIT 10
    • By granderodeo
      Olá  meus amigos programadores, estou desenvolvendo uma loja virtual, e percebi um erro. Criei um banco de dados  chamado 'cart_system' , com uma tabela 'cart'. Coloquei o site online para fazer testes, e coloquei os produtos normalmente no carrinho, mas ao abrir em outro PC o site, estava o mesmo carrinho, por exemplo coloquei 5 produtos em um PC e quando abrir o site em outro PC estava os mesmos 5 produtos já adicionados. Assim que adiciona o produto é adicionado ao 'cart' no BD, e quando for ver os produtos ele puxa do BD os produtos que estão atualmente no 'cart', será que foi esse o meu erro. Se puderem me ajudar com maneiras de concertar esse erro, agradeço muito. Vou deixar abaixo os códigos.
       
      Javascript do index.php que adiciona os produtos ao carrinho
      <script type="text/javascript"> $(document).ready(function(){ $(".addItemBtn").click(function(e){ e.preventDefault(); var $form = $(this).closest(".form-submit"); var pid = $form.find(".pid").val(); var pname = $form.find(".pname").val(); var pprice = $form.find(".pprice").val(); var pimage = $form.find(".pimage").val(); var pcode = $form.find(".pcode").val(); $.ajax({ url: 'carrinho/action_car.php', method: 'post', data: {pid:pid,pname:pname,pprice:pprice,pimage:pimage,pcode:pcode}, success:function(response){ $("#message").html(response); window.scrollTo(0,0); load_cart_item_number(); } }); }); load_cart_item_number(); function load_cart_item_number(){ $.ajax({ url: 'carrinho/action_car.php', method: 'get', data: {cartItem:"cart_item"}, success:function(response){ $("#cart-item").html(response); } }); } }); </script>  
      index_cart.php
      <div class="container"> <div class="row justify-content-center"> <div class="col-lg-10"> <div style="display:<?php if(isset($_SESSION['showAlert'])){echo $_SESSION['showAlert'];}else { echo 'none'; } unset($_SESSION['showAlert']); ?>" class="alert alert-success alert-dismissible mt-3"> <button type="button" class="close" data-dismiss="alert">&times;</button> <strong><?php if(isset($_SESSION['message'])){echo $_SESSION['message'];} unset($_SESSION['showAlert']); ?></strong> </div> <div class="table-responsive mt-2"> <table class="table table-bordered table-striped text-center"> <thead> <tr> <td colspan="7"> <h4 class="text-center text-info m-0">Produtos em seu carrinho!</h4> </td> </tr> <tr> <th>ID</th> <th>Imagem</th> <th>Produto</th> <th>Preço</th> <th>Quantidade</th> <th>Valor Total</th> <!------ REMOVER TODOS ITENS DO CARRINHO -----> <th> <a href="action_car.php?clear=all" class="badge-danger badge p-1" onclick="return confirm('Tem certeza de que deseja limpar seu carrinho?');"> <i class="fa fa-trash"></i>&nbsp;&nbsp;Limpar Carrinho</a> </th> <!------ FIM REMOVER TODOS ITENS DO CARRINHO -----> </tr> </thead> <tbody> <?php require 'config_car.php'; $stmt = $conn->prepare("SELECT * FROM cart"); $stmt->execute(); $result = $stmt->get_result(); $grand_total = 0; while($row = $result->fetch_assoc()): ?> <tr> <td> <?= $row['id'] ?></td> <!-- ID do produto do BD para o carrinho --> <input type="hidden" class="pid" value="<?= $row['id'] ?>"> <td> <img src="../<?= $row['product_image'] ?>" height="50"> </td> <!-- chamada da imagem do BD para o carrinho --> <td><?= $row['product_name'] ?> </td> <td> <?= $row['product_price'] ?> </td> <input type="hidden" class="pprice" value="<?= $row['product_price'] ?>"> </td> <!---- Aumentar ou Diminuir a quantidade do produto -----> <td><input type="number" class="form-control itemQty" value="<?= $row['qty'] ?>" style="width:80px"></td> <!---- Aumentar ou Diminuir a quantidade do produto -----> <!---- Fim Aumentar ou Diminuir a quantidade do produto -----> <td><?= $row['total_price'] ?> </td> <!-- preço total do carrinho --> <!------- REMOVER ITEM DO CARRINHO ------> <td> <a href="action_car.php?remove=<?= $row['id'] ?>" class="text-danger lead" onclick="return confirm('Quer mesmo remover esse produto do carrinho?');"> <i class="fa fa-trash"></i></a> </td> <!------- FIM ITEM REMOVER DO CARRINHO -------> </tr> <?php $grand_total += $row['total_price'] ?> <?php endwhile; ?> <tr> <td colspan="3"> <a href="../index.php" class="btn btn-success"><i class="fa fa-cart-plus"></i>&nbsp;&nbsp;Continue Comprando</a> </td> <td colspan="2"><b>Total Geral</b></td> <td><?= number_format($grand_total); ?> </td> <td> <a href="finalizar_car.php" class="btn btn-info <?= ($grand_total>1)?"":"disabled"; ?>"><i class="fa fa-credit-card"></i>&nbsp;&nbsp;Finalizar Compra</a> </td> </tr> </tbody> </table> </div> </div> </div> </div>  
      action_car.php
      <?php session_start();     require 'config_car.php'; //conecta ao BD     if(isset($_POST['pid'])) {         $pid = $_POST['pid'];         $pname = $_POST['pname'];         $pprice = $_POST['pprice'];         $pimage = $_POST['pimage'];         $pcode = $_POST['pcode'];         $pqty = 1;         $stmt = $conn->prepare("SELECT product_code FROM cart WHERE product_code=?");         $stmt->bind_param("s",$pcode);         $stmt->execute();         $res = $stmt->get_result();         $r = $res->fetch_assoc();         $code = $r['product_code'];         if(!$code){             $query = $conn->prepare("INSERT INTO cart (product_name,product_price,product_image,qty,total_price,product_code) VALUES (?,?,?,?,?,?)");             $query->bind_param("sssiss",$pname,$pprice,$pimage,$pqty,$pprice,$pcode);             $query->execute();             echo '<div class="alert alert-success alert-dismissible mt-2">             <button type="button" class="close" data-dismiss="alert">&times;</button>             <strong>Item adicionado ao seu carrinho!</strong>             </div>';         }         else{             echo '<div class="alert alert-danger alert-dismissible fixed-top">             <button type="button" class="close" data-dismiss="alert">&times;</button>             <strong>Item já está adicionado ao seu carrinho, você pode definir a quantidade no seu carrinho!</strong>             </div>';         }     }     if(isset($_GET['cartItem']) && isset($_GET['cartItem']) == 'cart_item'){         $stmt = $conn->prepare("SELECT * FROM cart");         $stmt->execute();         $stmt->store_result();         $rows = $stmt->num_rows;         echo $rows;     }     /*REMOVER ITENS DO CARRINHO*/     if(isset($_GET['remove'])){         $id = $_GET['remove'];         $stmt = $conn->prepare("DELETE FROM cart WHERE id=?");         $stmt->bind_param("i",$id);         $stmt->execute();         $_SESSION['showAlert'] = 'block';         $_SESSION['message'] = 'Produto removido do carrinho!';         header('location:index_cart.php');     }     if(isset($_GET['clear'])){         $stmt = $conn->prepare("DELETE FROM cart");         $stmt->execute();         $_SESSION['showAlert'] = 'block';         $_SESSION['message'] = 'Todos os produtos foram removidos!';         header('location:index_cart.php');     }      /* FIM REMOVER ITENS DO CARRINHO*/     /* ADICIONAR OU DIMINUIR QTD PRODUTO CARRINHO*/     if(isset($_POST['qty'])){         $qty = $_POST['qty'];         $pid = $_POST['pid'];         $pprice = $_POST['pprice'];         $tprice = $qty*$pprice;         $stmt = $conn->prepare("UPDATE cart SET qty=?, total_price=? WHERE id=?")         ;         $stmt->bind_param("isi",$qty,$tprice,$pid);         $stmt->execute();     }      /* FIM ADICIONAR OU DIMINUIR QTD PRODUTO CARRINHO*/      /* FINALIZAR PEDIDO */      if(isset($_POST['action']) && isset($_POST['action']) == 'order'){          $name = $_POST['name'];          $email = $_POST['email'];          $phone = $_POST['phone'];          $products = $_POST['products'];          $grand_total = $_POST['grand_total'];          $address = $_POST['address'];          $pmode = $_POST['pmode'];          $data = '';          $stmt = $conn->prepare("INSERT INTO orders (name,email,phone,address,pmode,products,amount_paid) VALUES (?,?,?,?,?,?,?)");          $stmt->bind_param("sssssss",$name,$email,$phone,$address,$pmode,$products,$grand_total);          $stmt->execute();          $data .= '<div class="text-center>                         <h1 class="display-4 mt-2 text-danger">Obrigado!</h1>                         <h2 class="text-success">Seu pedido foi realizado com sucesso</h2>                         <h4 class="bg-danger text-light rounded p-2">Items Comprados : '.$products.'</h4>                         <h4 class="bg-danger text-light rounded p-2">Seu nome : '.$name.'</h4>                         <h4 class="bg-danger text-light rounded p-2">Seu E-mail : '.$email.'</h4>                         <h4 class="bg-danger text-light rounded p-2">Seu telefone : '.$phone.'</h4>                         <h4 class="bg-danger text-light rounded p-2">Valor total pago : '.number_format($grand_total,2).'</h4>                         <h4 class="bg-danger text-light rounded p-2">Forma de pagamento : '.$pmode.'</h4>                    </div>';         echo $data;                 }      ?>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.