Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom galera, é o seguinte, estou fazendo um programinha simples de Sistema de Toner, sou iniciante e preciso de uma mãozinha...
Tenho a tabela Item que mostra a quantidade de itens que tenho no estoque. E tenho a tabela pedido, que será a tabela que a pessoa vai requisitar os toner, o que estou tentando fazer é:
Na hora de inserir o pedido, teria que pegar o dado Qtditem(item em estoque) e subtrair do Qtd_pedido, que a pessoa irá inserir na hora. Lembrando que terá vários modelos de Toners, ou seja vários estoques.
Dependendo do Modelo que o usuário marcar irá subtrair de uma quantidade diferente no estoque...
Não faço a miníma ideia de como faço isso, se puderem me ajudar.
Obrigado!
ps: não sei se meu bd está correto para isso que estou querendo fazer.

Entendi, irei fazer isso no meu Banco de Dados.
Mas gostaria de saber mesmo como vou fazer esta subtração entre duas tabelas diferentes.
Assim que clicar em inserir, pegar a qtdpedido e subtrair no qtditem.
Atualmente meu código para inserir está assim, creio que tenho que colocar aqui o código de subtração das tabelas, só não sei como seria este código.
Agradeço desde já...
>
Citar
public function inserir(){
//criar a conexao com o banco de dados
$pdo = new PDO(server, usuario, senha);
//verificar se o usuario preencheu os dados no formulario
if(isset($_GET["escola"]) && isset($_GET["qtd_pedido"]) && isset($_GET["data_saida"]) && isset($_GET["toner_idtoner"]) && isset($_GET["ndeserie"])){
//preencher os atributos com os valores do formulario
$this->Escola = $_GET["escola"];
$this->Qtd_pedido = $_GET["qtd_pedido"];
$this->Data_saida = $_GET["data_saida"];
$this->toner_Idtoner = $_GET["toner_idtoner"];
$this->Ndeserie = $_GET["ndeserie"];
//criar o comando sql
$smtp = $pdo->prepare("insert into pedido(idpedido,escola,qtd_pedido,data_pedido,data_saida, toner_idtoner, ndeserie, qtditem) values(null,:escola,:qtd_pedido,now(),:data_saida,:toner_idtoner,:ndeserie, Qtditem - qtd_pedido)");
//executar o comando no banco de dados passando os valores por parametros
$res = $smtp->execute(array (
':escola' => $this->Escola,
':qtd_pedido' => $this->Qtd_pedido,
':data_saida' => $this->Data_saida,
':toner_idtoner' => $this->toner_Idtoner,
':ndeserie' => $this->Ndeserie
));ESTRUTURA DE DADOS
*
1º - Uma solução viável seria a criação de uma TRIGGER), que por sua vez,
irá automaticamente subtrair o valor de qtdItem (presente na tabela item)
de acordo com a quantidade que você inserir em qtdPedido (tabela pedido).
Caso goste da solução, aqui vai ela:
CÓDIGO
DELIMITER //
CREATE TRIGGER alteraEstoque
AFTER INSERT ON pedido FOR EACH ROW
BEGIN
UPDATE item
SET qtdItem = ( qtdItem - NEW.qtdPedido )
WHERE idToner = NEW.idToner;DELIMITER ;
**Funcionamento**: basta você inserir normalmente um pedido que a *trigger* fará
o *UPDATE* na tabela *item* do novo estoque.
**Obs**: Para que a mesma não insira um valor no qual poderá deixar seu estoque
negativo (Ex: -200), faça uma pesquisa e verifique se o valor do pedido não é
maior que o valor disponível em estoque!
**2º** - Caso queira uma solução em **PHP**, então você deverá seguir as etapas:
1 - Realizar um *SELECT *para obter o saldo atual do *item*;
2 - Verificar se o* valor do pedido* não é maior que o *saldo do **item**;
3 - Realizar o *INSERT* do pedido;
4 - Realizar um *UPDATE* na tabela *item* atualizando o estoque com
o novo saldo.
**CÓDIGO EXEMPLO**
<?php
$idToner = 1;
$escola = "Example By PHP";
$quantidadeItem = 5;
$getQTD = $pdo->prepare ( 'SELECT * FROM item WHERE idToner = ?' );
$getQTD->bindValue ( 1, $idToner );
$getQTD->execute ();
$tonerData = $getQTD->fetch ( PDO::FETCH_OBJ );
if ( $quantidadeItem <= $tonerData->qtdItem ) {
# ESTÁ OK, PODEMOS INSERIR
$realizaPedido = $pdo->prepare ( '
INSERT INTO pedido (idToner, escola, qtdPedido) VALUES (?, ?, ?)
' );
$realizaPedido->bindValue ( 1, $idToner );
$realizaPedido->bindValue ( 2, $escola );
$realizaPedido->bindValue ( 3, $quantidadeItem );
$verificaInsert = $realizaPedido->execute ();
# SUBTRAÇÂO PARA OBTER NOVO SALDO
$novoSaldo = $tonerData->qtdItem - $quantidadeItem;
# FAZ O UPDATE DO NOVO SALDO
$updateNovoSaldo = $pdo->prepare ( 'UPDATE item SET qtdItem = ? WHERE idToner = ?' );
$updateNovoSaldo->bindValue ( 1, $novoSaldo );
$updateNovoSaldo->bindValue ( 2, $idToner );
if ( $updateNovoSaldo->execute () ) {
echo "SUCESSO!!! TUDO OCORREU BEM!!!";
}
} else {
echo "ERRO!!! O VALOR DO PEDIDO É MAIOR QUE O SALDO!!!";
die;
}
**3º **- Caso você só queira realizar um **SELECT **entre tabelas para obter
o saldo disponível entre toner, então aqui vai:
**CÓDIGO**
SELECT t.idToner, t.modeloToner AS 'modelo', i.qtdItem AS 'total', (i.qtdItem - SUM(p.qtdPedido)) AS 'disponivel'GROUP BY t.idToner;
Vale a pena ressaltar que ambas as tabelas foram baseadas na
sua, porém, as mesmas foram encurtadas!Muito obrigado pela ajuda cara!
Deu certinho o que eu queria. :D
Abraço!
Disponível ;)
Vamos lá:
1º - Você pode simplificar a "dificuldade" das tabelas inserindo a coluna
qtdItem junto com as colunas presentes na tabela toner.
CÓDIGO