情況是這樣的:最低價格選擇
我們有產品'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