2015-10-20 24 views
1

情況是這樣的。我有兩個表,就像這樣:取一個值,把它anothers表值,並計算總和

TABLE (haveToBuy): 
+--------------------+ 
| product | quantity | 
+--------------------+ 
| cake | 3  | 
| egg  | 2  | 
| milk | 5  | 
+--------------------+ 

TABLE (alreadyBough): 
+--------------------+ 
| product | quantity | 
+--------------------+ 
| cake | 1  | 
| egg  | 0  | 
| milk | 5  | 
+--------------------+ 

現在我想更新(alreadyBough)表的量值,所以它看起來是這樣的:

TABLE (haveToBuy): 
+--------------------+ 
| product | quantity | 
+--------------------+ 
| cake | 3  | 
| egg  | 0  | 
| milk | 5  | 
+--------------------+ 

TABLE (alreadyBought): 
+--------------------+ 
| product | quantity | 
+--------------------+ 
| cake | 1  | 
| egg  | 2  | 
| milk | 5  | 
+--------------------+ 

(2個雞蛋從表移動(haveToBuy)到TABLE(alreadyBought))。查詢會是什麼樣子?我怎樣才能解決這個查詢:

$query = mysql_query ("INSERT INTO alreadyBought (quantity) SELECT quantity FROM haveToBuy WHERE product='$productID' "); 
+0

我認爲你需要使用'update'查詢,因爲在'alreadyBought'表將有蛋入境,無論其是否0,但該值已經存在,除非你有一定的保證,以便使用'update'查詢 –

+0

只有一個過程永遠不會對你的餐桌做任何改變(而且你的購物清單上有一組代理商可以並行運作,對嗎?),你需要防範在兩種流程同時(或幾乎同時)購買雞蛋的情況下,通過某種方式確保「雙重購買」具有與「單一購買」相同的效果。而且,當購買雞蛋時,您還需要確保*兩個*表都被修改,或者*兩個*都不會被修改 - 以防過程在中間死掉,或者某個表更新由於某種原因而失敗。 – Peter

回答

0

我想你應該寫這樣的查詢

UPDATE alreadybought 
SET quantity= (
    SELECT quantity FROM haveToBuy WHERE product="egg" 
) 
WHERE product="egg" 

而且你可以發射另一個更新查詢設置haveToBuy表中的值,以雞蛋數量設置爲0

拿到2個值的總和,我可以給你像下面的例子,你可以使用你的需求

select sum(quantity)+sum(newvalue) from message where product="egg" 
修改

,或者你可以使用它沒有sum以及

select quantity+newvalue from message where product="egg" 

小心使用這樣的查詢,因爲你需要在查詢提交之前,並確保數據類型是相同的,以驗證所有的值

+0

嘿,這聽起來不錯,但我怎麼總結這兩個值?喜歡: 新值=值+其他值的表 –

+0

@ user3444297在mysql中查找'sum'函數 –

+0

你好,我試過這樣的東西,但它還沒有工作: UPDATE alreadybought SET eggs +(SELECT eggs FROM haveToBuy ...),其中,,, 我想有什麼不對的總和 –

相關問題