Ir para conteúdo

Arquivado

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

junaooaks

select dentro do update

Recommended Posts

ola pessoal

to tentando fazer um update na mesma tabela que quero fazer o select

e o seguinte tabela produto entrada pedido

 

na entrada de pedido acrescento a quantidade de produto a mais

tipo tem um pedido com o produto x que esta em estoque com 5 unidade

 

dentro entrada com o pedido, o produto x vai aumentar em quantidade no estoque

 

tem como fazer um update verifica a quantidade em estoque soma mais quantidade a inserir ?

$sql = 'UPDATE produto SET estoqueAtual = (SELECT sum(estoqueAtual + ?) as soma FROM produto WHERE idproduto = ?)
               WHERE produto.idproduto = ?';

       $stmt = $this->conex->prepare($sql);
       $stmt->bindParam(1, $quantidade, PDO::PARAM_INT);
       $stmt->bindParam(2, $codpro, PDO::PARAM_INT);

por logica foi o que eu pensei, mas da erro

 

posta um ex.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde amigo,

 

Acho que você só errou no SUM, tire a soma de dentro dele e faça um teste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se tirar a soma dentro SUM() não aparece erro mas também não soma os valores

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT (SUM(estoqueAtual) + ?) as soma

 

Não aparece o valor que você quer?

 

Lembre-se de que não podemos somar valores nulos, então você não pode ter nenhum registro como NULL na coluna estoqueAtual...

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT (SUM(estoqueAtual) + ?) as soma

 

Não aparece o valor que você quer?

 

Lembre-se de que não podemos somar valores nulos, então você não pode ter nenhum registro como NULL na coluna estoqueAtual...

 

desta forma que você colocou nao funciona da este erro

Invalid parameter number: number of bound variables does not match number of tokens 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você colocou copiou da maneira que eu coloquei com o ponto de interrogação ou colocou um número no lugar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não ficou bem claro de onde você vai tirar essa quantidade a somar..

mas supondo q você tenha 1 form onde o usuario vai digitar,

é só declarar normal em PHP como uma variavel $_POST (ou $_GET);

ex:

$quantidade_a_ser_somada = $_POST['cxnumero'];
$sql = mysql_query("update produto set estoqueAtual=estoqueAtual+'$quantidade_a_ser_somada'
where idproduto=1") or die(mysql_error());

com o idproduto você pode pode fazer da mesma forma.

Sugestão: eu faria uma busca antes, assim o form já seria carregado

apenas com o id selecionado, e na sql utilizaria outra variavel como foi feito c/ a quantidade a ser somada..

qqer coisa retorne

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não ficou bem claro de onde você vai tirar essa quantidade a somar..

mas supondo q você tenha 1 form onde o usuario vai digitar,

é só declarar normal em PHP como uma variavel $_POST (ou $_GET);

ex:

$quantidade_a_ser_somada = $_POST['cxnumero'];
$sql = mysql_query("update produto set estoqueAtual=estoqueAtual+'$quantidade_a_ser_somada'
where idproduto=1") or die(mysql_error());

com o idproduto você pode pode fazer da mesma forma,

ou - mais sensato - faça uma busca antes e carregue o form apenas com o id selecionado,ok?

A quantidade que vai ser somada, pelo que eu entendi, vem do banco e não de um form digitado.

 

Foi o que eu entendi do rapaz pelo menos :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

a quantidade a ser somada, e a que esta no banco e o que vem do form o Fernando C acertou.

so que estou usando pdo como metodo de interagir com o banco de dados

 

por isto o sinal (?) no meio da consulta.

e onde eu acho que pode ser o problema .

Compartilhar este post


Link para o post
Compartilhar em outros sites

a quantidade a ser somada, e a que esta no banco e o que vem do form o Fernando C acertou.

so que estou usando pdo como metodo de interagir com o banco de dados

 

por isto o sinal (?) no meio da consulta.

e onde eu acho que pode ser o problema .

Ah bom.

 

Então nesse caso você tem que fazer o seguinte amigo, desenvolver sua query e testar ela direto no banco (sem ponto de interrogação, com valores), verificar se é o que você precisa, se o SUM + Valor está funcionando como quer e etc.

 

Depois você passa isso pra aplicação, fazendo os ajustes do PDO e tudo mais.

 

Primeiro veja se a query que te passei te atende, direto no banco. Se atender ótimo, senão vamos achar outra forma.

 

Na sequência vemos qual o problema do ponto de interrogação. Precisamos separar os problemas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mano.

a sql nao apresenta problema colocado desta forma:

$sql = 'UPDATE produto SET estoqueAtual = (SELECT sum (estoqueAtual) FROM produto WHERE idproduto = ?)
               WHERE produto.idproduto = ?';

 

so que tambem nao faz a soma dos valores com o form.

 

usando (?) parou de aparecer o erro. so que nao faz a soma do valor, nao alterando o valor na tabela

nao altera o valor da tabela produto.

$sql = 'UPDATE produto SET estoqueAtual = (SELECT sum (estoqueAtual + ?) FROM produto WHERE idproduto = ?)
               WHERE idproduto = ?';

       $stmt = $this->conex->prepare($sql);
       $stmt->bindParam(1, $quantidade, PDO::PARAM_INT);
       $stmt->bindParam(2, $codpro, PDO::PARAM_INT);
       $stmt->bindParam(3, $codpro, PDO::PARAM_INT);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, tire o ponto de interrogação de dentro do SUM. Rodou a query direto no banco como eu sugeri? Fez testes lá? Achou a sintaxe certa pra ela, onde vai a soma e tudo mais?

 

Após ter feito isso parta para o PHP. Uma coisa de cada vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mano.

a sql nao apresenta problema colocado desta forma:

$sql = 'UPDATE produto SET estoqueAtual = (SELECT sum (estoqueAtual) FROM produto WHERE idproduto = ?)
               WHERE produto.idproduto = ?';

 

so que tambem nao faz a soma dos valores com o form.

 

usando (?) parou de aparecer o erro. so que nao faz a soma do valor, nao alterando o valor na tabela

nao altera o valor da tabela produto.

$sql = 'UPDATE produto SET estoqueAtual = (SELECT sum (estoqueAtual + ?) FROM produto WHERE idproduto = ?)
               WHERE idproduto = ?';

       $stmt = $this->conex->prepare($sql);
       $stmt->bindParam(1, $quantidade, PDO::PARAM_INT);
       $stmt->bindParam(2, $codpro, PDO::PARAM_INT);
       $stmt->bindParam(3, $codpro, PDO::PARAM_INT);

 

Acredito que você deva fazer da seguinte forma:

 

SET estoqueAtual = estoqueAtual + (SELECT SUM(?) FROM produto ...)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, tire o ponto de interrogação de dentro do SUM. Rodou a query direto no banco como eu sugeri? Fez testes lá? Achou a sintaxe certa pra ela, onde vai a soma e tudo mais?

 

Após ter feito isso parta para o PHP. Uma coisa de cada vez.

 

mano e isto que você quis dizer

 

fiz a consulta dentro do sql trocando as ? com o valor da variavel

UPDATE produto SET estoqueAtual = (SELECT sum (estoqueAtual + '5') FROM produto WHERE idproduto = '9')
               WHERE idproduto = '9'

ou assim:

UPDATE produto SET estoqueAtual = (SELECT sum (estoqueAtual) FROM produto WHERE idproduto = '9')
               WHERE idproduto = '9'

 

ambos da o seguinte erro:

#1093 - You can't specify target table 'produto' for update in FROM clause

Compartilhar este post


Link para o post
Compartilhar em outros sites

A mesma tabela e coluna estão no SELECT e no UPDATE , quase como trancar a gaveta com a chave dentro ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara não to mais entendendo o que você quer fazer.

 

Se na tua informação vem do form porque fazer essa subquery?

 

Se tu quer somar o estoqueAtual com um valor não bastaria ser:

 

UPDATE produto SET estoqueAtual = estoqueAtaul + valor

?

Compartilhar este post


Link para o post
Compartilhar em outros sites

experimente isso:

 

$sql = "UPDATE produto SET estoqueAtual = estoqueAtual + :valor FROM produto WHERE idproduto = :id"

 

$stmt = $this->conex->prepare($sql);

 

$stmt->bindValue(":valor", $valor);

$stmt->bindValue(":id", $idProduto);

 

$stmt->execute();

 

Lembrando que a variavel $valor contem o valor que você quer somar ao estoque atual e a variável $idProduto contem o id do produto que você ter o estoque atualizado.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera não sei se vão conseguir me ajudar mais já estou ficando preocupado, se puderem me ajudar agradeço.

Tenho duas tabelas:

tabela: produto

Produtoid, qtd_total

 

tabela: aquisicao

id, Produtoid, quantidade

 

Gostaria de pegar a célula quantidade da tabela aquisição mais apenas o ultimo registro e somar com a célula qtd_total

onde os Produtoid sejam iguais e depois fazer um update na celular qtd_total com o resultado dessa soma.

Já fiz uma parte mais não consigo fazer o update.

 

 

select
(select qtd_total from produto,aquisicao where aquisicao.Produtoid = produto.Produtoid order by aquisicao.id desc limit 1) as tb1,
(select quantidade from aquisicao order by id desc limit 1) as tb2,
(select SUM(tb1+tb2)) as result,
(select Produtoid from aquisicao order by id desc limit 1) as compara;
update produto set qtd_total = result where Produtoid = compara;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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