现在已经在网上浏览了一段时间,似乎看不到任何与我想要的东西类似的东西。我知道这与我编写查询的方式有关,但是任何帮助将不胜感激。
我正在尝试做的基础知识是:
它以以下格式存在:
名称,条形码,物品,数量,位置,价格和日期
名称-可以在多行条形码中使用-用于特定项目,但可以用作多个位置项目-与条形码相同,但包含名称数量-自我说明的位置-这可以是不同的位置价格- 附加到特定商品的日期-上一次购买该商品的时间
棘手的事情是,“名称”可以在不同的位置以不同的价格包含多个商品(条形码和商品)。这样的想法是,客户可以看到他们在设定的时间购买了多少商品,因此他们知道需要出售多少商品。
但是,他们购买的价格可能会有所不同,因此,如果价格与之前的购买价格不同,则需要在表格中创建另一行。
整件事背后的想法是要记录每个位置的每个项目的“名称”,然后记录他们在何时以及上次购买该项目时的价格。
希望这是有道理的。
在伪代码中:
Insert into table if does not exist - name, barcode, item, quantity, location, price and date If name, barcode, item, location and price are the same - Update quantity and date (if more recent)
首先,UNIQUE在名称,条形码,商品,位置和价格上添加一个约束。
UNIQUE
ALTER TABLE tableX ADD CONSTRAINT tableX_UQ UNIQUE (name, barcode, item, location, price) ;
然后,您可以使用INSERT INTO ... ON DUPLICATE KEY UPDATE:
INSERT INTO ... ON DUPLICATE KEY UPDATE
INSERT INTO tableX (name, barcode, item, location, price, quantity, date) VALUES (?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE quantity = CASE WHEN VALUES(date) > date THEN quantity + VALUES(quantity) -- add quantity ELSE quantity -- or leave as it is END , date = CASE WHEN VALUES(date) > date THEN VALUES(date) ; -- set date to new date ELSE date -- or leave as it is END
REPLACE也可以使用,但是行为有所不同(如果您具有外键,则尤为重要)。
REPLACE