UPDATES DIVERSOS NA MESMA COLUNA PARA DIFERENTE ID´S

06/11/2019

7

Prezados membros do fórum, bom dia.
estou com dificuldades em montar a seguinte query como descrito no título acima:

UPDATE estoque set qt = qt - ('3','4','5') where id_produto IN ('2','3','4')

o objetivo é criar um UPDATE dinâmico, onde cada valor estará subtraindo o valor atual do estoque (representa um baixa no estoque do determinado produto) ou seja... atualizar o valor da coluna qt de seus respectivos ids.

id qt depois do uptade
2 20-3 17
3 15-4 11
4 10-5 5

colegas, não encontro maneiras para resolver esta questão. Desde já sou grato pela ajuda e orientação que sempre foi dada.
Responder

Posts

06/11/2019

Manoel Junior

Bom dia, você pensou em utilizar um while ou for para realizar essa tarefa?... não precisa nem ser no PHP, criando uma procedure no MySql deixa o código PHP menos alimentado, pois facilita manutenções futuras.
Responder
deveria ser algo assim:
UPDATE estoque set qt = qt - (case id_produto when 2 then 3 when 3 then 4 else 5 end) where id_produto IN (2,3,4)

mas não entendi o porque de ser numa única instrução.
Responder

06/11/2019

Leonardo

deveria ser algo assim:
UPDATE estoque set qt = qt - (case id_produto when 2 then 3 when 3 then 4 else 5 end) where id_produto IN (2,3,4)

mas não entendi o porque de ser numa única instrução.


Prezado, como utilizaria esta query junto com o php? pode me dar um exemplo?

UPDATE estoque set qt = qt - ($quantidade) where id_produto IN ('$id_produto').
reumindo preciso realizar um update para varios IDS se necessario, pois trata -se de vendas de produtos e cada venda preciso dar baixa no meu estoque de maneira automatica. acredito que agora consegui explicar melhor para você.
Responder

06/11/2019

Leonardo

Bom dia, você pensou em utilizar um while ou for para realizar essa tarefa?... não precisa nem ser no PHP, criando uma procedure no MySql deixa o código PHP menos alimentado, pois facilita manutenções futuras.


Prezado, boa noite.
pode me dar um exemplo?

UPDATE estoque set qt = qt - ($quantidade) where id_produto IN ('$id_produto').
reumindo preciso realizar um update para varios IDS se necessario, pois trata -se de vendas de produtos e cada venda preciso dar baixa no meu estoque de maneira automatica. acredito que agora consegui explicar melhor para você.
Responder

07/11/2019

Manoel Junior

Bom dia, você pensou em utilizar um while ou for para realizar essa tarefa?... não precisa nem ser no PHP, criando uma procedure no MySql deixa o código PHP menos alimentado, pois facilita manutenções futuras.


Prezado, boa noite.
pode me dar um exemplo?

UPDATE estoque set qt = qt - ($quantidade) where id_produto IN ('$id_produto').
reumindo preciso realizar um update para varios IDS se necessario, pois trata -se de vendas de produtos e cada venda preciso dar baixa no meu estoque de maneira automatica. acredito que agora consegui explicar melhor para você.

Este link mostra como utilizar um array, que serve para armazenar os id's, no while. No caso, a quantidade também pode ser utilizada como um array. Refiro-me numa definição simbólica, pois cumpre a mesma objetivo:
https://stackoverflow.com/questions/12176709/how-can-i-simulate-an-array-variable-in-mysql
Responder
Prezado, como utilizaria esta query junto com o php? pode me dar um exemplo?

UPDATE estoque set qt = qt - ($quantidade) where id_produto IN ('$id_produto').
reumindo preciso realizar um update para varios IDS se necessario, pois trata -se de vendas de produtos e cada venda preciso dar baixa no meu estoque de maneira automatica. acredito que agora consegui explicar melhor para você.

se você está fazendo uma venda ela precisa de um identificador, e o estoque só pode ser baixado se a venda for confirmada.
neste caso, crie uma stored procedure (você também pode fazer a partir de triggers) para atualizar o estoque a partir de uma compra e/ou venda. assim a stored procedure se encarrega de atualizar o estoque e a regra de negócio fica no banco de dados, o que pra mim é mais seguro e mais fácil de manipular, caso seja necessário implementar/corrigir.
Responder