情况是这样的:最低价格选择
我们有产品'A123',我们必须记住它的最低价格。 单个产品的价格来自随机数量的商店,并且没有办法知道商店x何时会将'A123'的价格发送给我们。
所以,我曾与列SQL表:
product_number
price
shop (from which shop this price comes)
用于更新产品价格的SQL函数看起来像这样(这是SQL伪代码,语法并不重要):
function update_product(in_shop, in_product_number, in_price)
select price, shop into productRow from products where product_number = in_product_number;
if found then
if (productRow.price > in_price) or (productRow.price < in_price and productRow.shop = in_shop) then
update row with new price and new shop
end if;
else
insert new product that we didn't have before
end if;
(productRow.price < in_price and productRow.shop = in_shop)条件是为了防止这样的情况:
在产品表中我们有
A123 22.5 amazon
然后从亚马逊又来了信息:
A123 25 amazon
由于上述条件,我们更新的价格更高,这是正确的行为。
但算法在这种情况下失败:我们再次在产品表中的一行:
A123 22.5 amazon
则来自梅林信息
A123 23 merlin (we don't update because price is higher)
则来自亚马逊信息
A123 35 amazon
我们更新表格,现在我们有:
A123 35 amazon
但这是错误的,因为merlin早些时候该产品的价格较低。
任何想法如何避免这种情况?
因此,您是最低的每个供应商的最高价格?您需要为所有供应商保存(供应商,maxprice_vendor),然后从所有maxprice_ *值中选择最小值。 – 2009-12-17 08:22:23
像在其他答案一样的评论;)为所有供应商保持最高价格的解决方案是显而易见的,但在这样的表将少数百万记录,我恐怕会查询它会慢... – Kuba 2009-12-17 08:37:34
不是最高价格,但最新价格。如果你使用数据库,查询不会很慢。数据库使用索引访问而不是搜索所有记录。 – PauliL 2009-12-17 09:07:58