2009-01-13 173 views
0

我正在使用MySQL和PHP。我有一個包含列ID和數量的表格。我想檢索作爲最後一筆數量總和的行的ID,因爲它達到總數爲40的數量。更具體。我在數據庫中有3行。一個數量爲10,一個數量爲30,另一個數量爲20.因此,如果我總結數量得到結果40,我將總結前兩個女巫的意思是:10 + 30 = 40.這樣,最後一個Id用於總和數字40是2.我只想知道用於完成總和40的最後一行的編號。MySQL選擇記錄總和

如果詢問我會提供更多詳細信息。謝謝!!


讓我這樣說: 我真的有6種產品在我的手。第一個來到我的擁有在10日,接下來的3來到11日和最後2來到12。

現在,我想賣我的股票3產品。並想按照他們來的順序出售它們。因此,對於想要3種產品的顧客,我會向他推銷來自10個產品和來自11個產品的產品11.

對於想要2種產品的下一個顧客,我會向他出售一種產品11的日期從3種產品的最後一個訂單中保留,另一種從12中的另一種開始。

問題是,我將如何知道每個產品的售價?我認爲,如果我能找出哪些行總計了每個請求的數量,我就知道每次我想發送訂單時從哪裏開始總和。所以首先我會看看哪些行總結了3種產品並保留條目ID。對於下一個訂單,我將從該ID開始計數,然後總和,直到總結2個產品的第二個訂單爲止,依此類推。我認爲這樣,我可以跟蹤每個產品的進貨價格。因此,我不會按照使用第一價格所構成的價格從12日起銷售產品。

我希望你能理解。我只需要知道什麼價格有我的任何產品,所以我會知道,第一個產品將有一個價格,但隨着產品價格上漲,我必須提高我的價格...因此,最後的產品必須出售更高的價格。我只能做到這一點,如果我跟蹤這...

非常感謝。


沒人?或者,更容易:MySQL應該爲SUM選擇所需的行(quantity),例如40或更高。然後給我參加總和過程的最後一行的ID。

回答

0

我不太明白你的問題。你可以嘗試更恰當地重新措詞嗎?從我的理解,這裏是你的數據庫的結構:

ProductID ArrivalDate 
    1   10 
    2   11 
    3   11 
    4   11 
    5   12 
    6   12 

現在你問:「怎麼會,我知道價格有每個產品我賣」?由於數據庫中的每個值都沒有價格屬性,這種混淆讓我感到困惑。你的數據庫不應該是這樣的:

ProductID ArrivalDate Price 
    1   10    100 
    2   11    200 
    3   11    300 
    4   11    300 
    5   12    400 
    6   12    400 

就我個人而言,我認爲你的想法找出售出的價格是有缺陷的。它會更有意義一些更多的字段添加到您的數據庫:

ProductID ArrivalDate Price  InStock DateSold 
    1   10    100  Yes  17 
    2   11    200  Yes  17 
    3   11    300  Yes  18 
    4   11    300  Yes  18 
    5   12    400  no   
    6   12    400  no   

在改變你的數據庫,你可以輕鬆地跟蹤,當產品到達的,售出之日起,它的價格,也許數量(我可以不知道它是否是一個實際的領域)。

此外,您可以通過分隔SQL查詢,甚至添加一些代碼爲您完成一些工作來簡化和簡化您的工作。

1

第三列有一個運行總數。然後您可以簡單地返回最後一行,其中運行總計< =您的目標值。

所以你的表應該是這樣的:

 
ID Quantity RunningTotal 
1   10    10 
2   30    40 
3   20    60

注:如果您在表中刪除一行,記得要更新所有後續行RunningTotal -= DeletedRow.Quantity

0

依託表ID的可能是這方面的一個壞主意,但如果這是它是如何真正做,你可以嘗試這樣的事情(未測試):

SELECT yourTableA.id 
    FROM yourTable AS yourTableA 
    JOIN yourTable AS yourTableB 
WHERE (yourTableA.value + yourTableB.value) = 40 
    AND yourTableA.id != yourTableB.id 
ORDER BY yourTableA.id 

這種類型的解決方案不僅會如果你期望你只需要兩行就可以達到你的目標總和。由於這很可能不是這種情況,所以最好的辦法是嘗試獲取所有行,並對返回的數據進行編程。

由lc發佈的Running Total解決方案也是一個不錯的選擇,儘管我通常儘量避免存儲計算的數據,除非我絕對必須這樣做。


基於來自該請求將更新的信息,我有一個備用的答案。

這聽起來不像你關心庫存。你更關心,在產品進來了。

SELECT * 
    FROM product 
ORDER BY product.receivedData 

過程中的每個記錄,因爲他們進來,店裏的價格該記錄,並堅持下去,只要你需要,直到你達到項目的數量,您需要。你應該得到一個項目清單,該級別的庫存數量和該級別的價格。