2

productsデータベースに列/フィールドを持つテーブルがあります。

  • 製品番号
  • 商品名
  • 説明
  • サプライヤー
  • 購入日

今、私が達成したいのはこれです:

  • テーブルに新しい値を追加するたびにproducts、新しい入力の「productname」と「supplier」の値は、productsテーブルに存在するすべての値を比較します。

シナリオ:

  • 新しい製品名とサプライヤーの値がproductsテーブルに既に存在する場合、新しい値の数量が既存の値の数量に追加されます
  • ELSE が存在しない場合は、新しい値をproductsテーブルに追加します。

試したコードは次のとおりですが、機能していません。

Delimiter //
CREATE PROCEDURE `wew`(pid int,pname varchar(50),pdesc varchar(50),psupp varchar(50),pdate date,pquant int)
begin
declare lloyd char default null;
select productname from products where productname=pname LIMIT 1 into lloyd for update;
if(lloyd) then
update products set quantityleft=quantityleft+pquant where productname=pname;
else
insert into products (productid,productname,proddescription,supplier,lastpurchasedate,quantityleft) values(pid,pname,pdesc,psupp,pdate,pquant);
end if;
end;
//

これを手伝ってもらえますか?これには本当に困惑。

説明の製品:

SQL result

Host: localhost
Database: prodpurchase
Generation Time: Mar 24, 2013 at 03:52 PM
Generated by: phpMyAdmin 3.2.4 / MySQL 5.1.41
SQL query: Desc Products; 
Rows: 7

Field             Type            Null      Key      Default    Extra
ProdID            int(5)          NO        PRI       NULL  auto_increment
ProdName          varchar(50)      NO       UNI       NULL   
ProdSupplier      varchar(250)     NO       UNI       NULL   
ProdDescription   varchar(250)     NO        NULL    
ProdDate          date             NO        NULL    
ProdPrice         double            NO       0   
ProdQuantity      int(50)        NO      NULL    
4

1 に答える 1

2

MySQL のINSERT...ON DUPLICATE KEY UPDATEを利用できます

UNIQUEまず、列に制約を追加する必要があります:productnameおよびsupplier:

ALTER TABLE products ADD CONSTRAINT tb_uq UNIQUE (productname, supplier)

それを実行したら、

INSERT INTO products (productid, productname, proddescription, supplier, lastpurchasedate, quantityleft)
VALUES (pid, pname, pdesc, psupp, pdate, pquant)
ON DUPLICATE KEY UPDATE quantityleft = quantityleft + pquant;
于 2013-03-23T08:25:47.860 に答える