Ir para conteúdo

POWERED BY:

Arquivado

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

AnibalJR

Atualizar varias linhas do BD atraves de uma array

Recommended Posts

Boa noite pessoal, Estou precisando de uma força.

Criei uma tela de venda e que baixa estoque de uma tabela de estoque separada, porem estou com dificuldade de retornar o estoque  de varios itens de uma vez quando eu excluo a venda?

Para cada produto vendido eu crio uma linha na tabela de vendas, mas para deletar eu uso só uma das referencias, por isso o select duplo na mesma tabela, para retornar com o primeiro valor, as demais linhas que possuem o mesmo numero de pedido.

Nesta regra tentei buscar a tabela de estoque e a tabela de vendas e somar o campo de venda ao campo de estoque e fazer um update no estoque, mas ele faz apenas para 1 item

Segue o codigo que estou tentando usar para atualizar varias linhas na tabela de estoque de borrachas:

    protected function retornaitens() {
        $dadosVenda = "SELECT * from pdvborracha WHERE id = $_GET["var3"];
                $dadostodas = "SELECT * FROM pdvborracha WHERE pedido = ".$dadosVenda["pedido"];
        $linhafinal = mysql_fetch_array($dadostodas);

        $query = "SELECT * FROM estoquematprima WHERE produto=".$linhafinal["produto"];


 ($linha = mysql_fetch_array($query));
        $quantidade = $linha["quantidade"] + $linhafinal["quantidade"];

        $query = "UPDATE estoquematprima SET quantidade=".$quantidade." WHERE produto=".$linhafinal["produto"];

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, Alaerte Gabriel disse:

Você precisa adicionar um laço de repetição para percorrer os registros, faltou um while() aí

while($linha = mysql_fetch_array($query));

seria isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, mas nunca execute métodos e cálculos nas defininições dos laços e condicionais (while, for, foreach, if, etc).

 

Neste caso, guarde o array de resultados numa variável e em seguida execute o while:

 

$resultadoQuery      = mysqli_query($con,$query);
$conjuntoDeRegistros = mysqli_fetch_array($resultadoQuery);

while($linha = $conjuntoDeRegistros){

	echo $linha['nome_da_coluna'].'<br>';

}

 

Neste exemplo usei o mysqli ao invés do mysql que está usando.

 

O driver padrão mysql já está deprecado na versão 7 do PHP (além dele ser bem mais lento que o mysqli e ninguém mais deveria usá-lo em ambientes de produção há anos).

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 06/03/2017 at 08:20, Alexandre Kopelevitch disse:

Sim, mas nunca execute métodos e cálculos nas defininições dos laços e condicionais (while, for, foreach, if, etc).

 

Neste caso, guarde o array de resultados numa variável e em seguida execute o while:

 


$resultadoQuery      = mysqli_query($con,$query);
$conjuntoDeRegistros = mysqli_fetch_array($resultadoQuery);

while($linha = $conjuntoDeRegistros){

	echo $linha['nome_da_coluna'].'<br>';

}

 

Neste exemplo usei o mysqli ao invés do mysql que está usando.

 

O driver padrão mysql já está deprecado na versão 7 do PHP (além dele ser bem mais lento que o mysqli e ninguém mais deveria usá-lo em ambientes de produção há anos).

 

 

Preciso atualizar Alexandre, mas ja tem bastante tempo que uso esse driver no meu servidor e tem muitas paginas no controller com esse driver, vai dar trabalho reescrever tudo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por clovis.sardinha
      Boa noite.
      Tenho um bd com 2 tabelas. A primeira (serv_os) tem as colunas id, fk_os e fk_servico  a segunda (prod_os) tem as colunas id, fk_os e agora eu criei a coluna fk_serv. A coluna fk_serv vai ser preenchida com o valor id da primeira coluna. Fiz o seguinte update entre as tabelas: 
      UPDATE prod_os
      JOIN serv_os ON serv_os.fk_os= prod_os.fk_os
      SET prod_os.fk_serv = serv_os.id
      WHERE prod_os.fk_os=serv_os.fk_os;
       
      Até aqui tudo bem, porém, fiquei com o seguinte problema.  Muitas vezes  existem vários serviços na primeira tabela, por exemplo id=100 produto A, id=101 produto B, porém o fk_os é o mesmo . Ai na coluna fk_serv aparece sempre o id do produto A. Nesse caso duas vezes. O produto B, C,...etc não aparece. 
      Não consegui nenhum comando, já que o join é pela coluna fk_os, que fizesse o update mudar o ponteiro para o serviço B,C,etc.
      Se alguém puder me ajudar eu agradeço.
    • Por ILR master
      Boa tarde, pessoal.
      Espero que todos estejam bem.
       
      Seguinte:
      Tenho a seguinte consulta:
       
      $usuarios= "SELECT * FROM usuarios";
      $query= mysqli_query($conexao, $usuarios) or die ("Usuário não encontrado");
      $usuario = mysqli_fetch_array($query);
       
      Quero pegar apenas o campo 'nome' da tabela 'usuarios' e colocar todos os resultados da seguinte forma:
       
      $nomes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila");
       
      Agradeço desde já.
      Abs
       
       
    • Por vicente386
      Ola. Tenho uma tabela no 3 campos que sao "LIVRO, POS, PAGINA" ao qual a logica e a seguinte: cada livro tem 100 paginas cada pagina tem 30 posiçoes tenho 8,364 registros pra inserir chegando a 100 paginas com 30 posiçoes cada passa para o livro 2 e como fazer o update na tabela inserindo nos campos LIVRO = 1, POS de 0 a 30 e PAGINA 1 para cada 30 registros logos apos pagina 2 ?
      estou tentando fazer assim:
      <?php > ini_set('max_execution_time', 2000); $pdo = new > DO(DB_SERVER.":host=".DB_HOST.";dbname=".DB_BASE,DB_USER,DB_PASSWORD); > $sql = $pdo->prepare("SELECT count(*) FROM tabela2018"); > $sql->execute(); > $livro = 1; > foreach($sql as $obj){ > $variavel = $obj[0]; > ceil((float)$variavel/100); > $qtdlaco = ceil((float)$variavel/100); > for ($id = 1; $id <= 35; $id++) { > for($L=1; $L < $qtdlaco; $L++) { > for ($P = 0; $P <= 30; $P++) { > $sql = $pdo->prepare("UPDATE tabela2018 SET LIVRO = :LIVRO, POS = :POS, PAGINA = :PAGINA WHERE idtabela2018 = $id"); > $sql->bindValue(':LIVRO', $livro); > $sql->bindValue(':POS', $P); > $sql->bindValue(':PAGINA', $L); > $sql->execute(); > } > } > } >} ?> mas na tebela so aparece: LIVRO POS PAGINA 1 30 83 1 30 83 1 30 83 e nao como deveria : LIVRO POS PAGINA 1 0 1 1 1 1 1 2 1
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse resultado do array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
×

Informação importante

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