Atualizado em 14 de Fevereiro de 2014

Somar ou Subtrair Valor no Update do SQL

Olá pessoal,

Neste post vou falar de uma situação muito comum quando estamos desenvolvendo sistema de estoque. Imagine a seguinte situação: Você esta desenvolvendo um sistema de venda de produtos onde ao ser vendido um produto o sistema tem que dar automaticamente baixa no estoque.

Diante desta situação muito programadores (inclusive eu há alguns anos atrás) iria fazer o seguinte procedimento para resolver a questão: Fazer um Select para obter a quantidade atual, faria a adição ou subtração dos valores e por último faria um Update para atualizar a quantidade do produto, porém existe uma forma mais rápida e correta de se fazer este procedimento.

Para você entender melhor criamos uma tabela com o nome de produtos no qual ela contém um campo chamado quantidade que guarda a quantidade de produtos que existe no estoque e iremos fazer a atualização do Produto chamado Tênis de Futebol.

Vamos ver o SQL para Subtrair um Valor do campo da quantidade:

UPDATE produtos SET quantidade = quantidade-1 WHERE nome_produto = 'Tênis de Futebol'

Agora, vamos ver o SQL para Somar um Valor no mesmo campo:

UPDATE produtos SET quantidade = quantidade+1 WHERE nome_produto = 'Tênis de Futebol'

Apesar destes exemplos estarem dentro de um contexto, ele pode ser usado em qualquer momento que precisarmos realizar algum calculo dentro do SQL e sem falar que é extremamente fácil de usar.


Curta a nossa página



E isso aí pessoal, até a próxima.

Tags:  Banco de dados | PHP | SQL

Comentários

Sua foto do perfil

Julio Cesar

Obrigado pela ajuda de sempre, incrivel como tudo o que procuro acabo encontrando aqui de forma simples e eficaz.
Realmente vc é uma mão na roda .

kkkk

27 de Janeiro de 2016 - 02:29

Sua foto do perfil

Mauricio Programador

Obrigado amigo. Abraço.

03 de Fevereiro de 2016 - 14:26

Sua foto do perfil

Ernesto Cuambe

Ai Cara Beleza o teu post Ajudou me muito memo cara, estou desenvolvendo um Sistema de gestao mas tinha mesmo esse impasse. Abracos Mauricio

07 de Novembro de 2015 - 13:13

Sua foto do perfil

Fillipe Lucas

Olá gente estou com um problema parecido porém não estou utilizando trigger.

UPDATE produto SET
qtd_total = (select produto.qtd_total from produto,aquisicao where aquisicao.Produtoid = produto.Produtoid order by aquisicao.id desc limit 1) + (select aquisicao.quantidade from aquisicao order by id desc limit 1);

esses dois select separados trazem os resultados porém quando coloco nesse update gera um erro "MySQL Error 1093 - Can't specify target table for update in FROM clause"

23 de Setembro de 2015 - 13:03

Sua foto do perfil

Mauricio Programador

Olá Fillipe,

Para testar o seu SQL para ver se ele esta retornando os dados certo primeiro teste eles em separado, com isso deve achar o erro em algum dos SQL secundários.

Abraço.

28 de Setembro de 2015 - 09:32

Sua foto do perfil

Ricardo

Estou com uma divida na minha trigger para atualizar o estoque após entrada através de tabela especifica de ent_produto. pois se o produto ainda não existe ela não atualiza.
Estou usando assim:

DELIMITER //

CREATE TRIGGER ent_produto AFTER INSERT ON entradaproduto
FOR EACH ROW
BEGIN
update produto set produqtda = produqtda + new.produtoqtda where idproduto = idproduto;
END //

DELIMITER ;

Desde já agradeço

10 de Junho de 2015 - 20:42

Sua foto do perfil

Mauricio Programador

Olá Ricardo,

Não entendi muito bem a sua implementação, pois como ele vai atualizar o estoque de um produtos se ele não existe?

Reveja isso.

Abraço.

14 de Junho de 2015 - 23:57

Sua foto do perfil

Thiago

E se eu quiser somar o que tem no meu estoque com o valor de um edit?

UPDATE produtos SET quantidade = quantidade+EdtQuant WHERE nome_produto = 'Tênis de Futebol'

29 de Maio de 2015 - 09:15

Sua foto do perfil

Mauricio Programador

Olá Thiago,

Pode ser feito sem problemas também.

Abraço.

01 de Junho de 2015 - 09:17

Sua foto do perfil

Wellington

Parabéns pelo blog e pelo post, me ajudou demais!

20 de Abril de 2015 - 01:55

Sua foto do perfil

Adelor da Silva

Muito obrigado por essa importante dica!

Mas tenho uma dúvida a algum tempo, qual a melhor forma para dar baixa em produtos com composição?

Por exemplo: Um jogo de cozinha pode ser composto de 01 mesa, 04 cadeiras, etc

Minha dúvida é: como baixar um jogo de cozinha que é o produto composto e dar baixa automaticamente nas matérias primas, 01 Mesa, 04 cadeiras!

18 de Fevereiro de 2014 - 07:56

Sua foto do perfil

Mauricio Programador

Olá Adelor,

Legal sua pergunta. Independentemente de quantos produtos tenha a "Cozinha" você terá que fazer um UPDATE para cada um destes produtos, pois provavelmente eles estejam em registros separados na sua tabela de Matérias Primas.

Mas se a sua estrutura de tabelas estiver bem organizada dizendo que a cozinha tem 1 mesa, 4 cadeiras você poderá fazer um Laço de repetição para ele fazer o UPDATE em todas as Matérias Primas automaticamente.

Espero ter esclarecido sua dúvida.

Abraço

18 de Fevereiro de 2014 - 09:19

Sua foto do perfil

Adelor da Silva

Como seria esse laço de repetição?

18 de Fevereiro de 2014 - 09:36

Sua foto do perfil

Mauricio Programador

Não sei como esta as suas Tabelas mais seria mais ou menos assim:

$resultado = mysql_query('SELECT * FROM materia_prima WHERE produtoID = "AQUI VEM O ID DO PRODUTO"');

while($dados = mysql_fetch_array($resultado))
{
UPDATE materia_prima SET quantidade = quantidade-QUANTIDADE-QUE-VAI-SER-RETIRADA WHERE idmateriaprima= '$dados['ID DO PRODUTOS DA MATERIA PRIMA']'
}

Daí e so colocar os campos nos lugares certinho.

18 de Fevereiro de 2014 - 09:37

Sua foto do perfil

Adelor da Silva

Desculpa minha ignorância, mas como o sistema saberá se o produtoID já não foi atualizado?

18 de Fevereiro de 2014 - 14:08

Sua foto do perfil

Mauricio Programador

Não tem porque pedir desculpa.

Na verdade ai depende de como seu sistema esta implementado, geralmente ele faz esta atualização depois de uma ação, exemplo uma venda, então sempre que ele fizer a venda você realiza a baixa do estoque.

18 de Fevereiro de 2014 - 14:08

NEWSLETTER

Receba dicas de programação
em seu e-mail

TWITTER

Acompanhe tudo o que rola
com Mauricio Programador

NEWSLETTER