2013-02-28 71 views
-1

我有2個表格:user_valuesdecrease_timesMysql從另一個表中減少值

user_values有3列:username, property, valuedecrease_times有3列:property, decrease_value, decrease_time。所有這些都是動態的,變化很大。

我有被調用每小時cron作業,和我想要做的就是減少與存儲在decrease_value量如果propertyuser_values等於propertydecrease_times全部來自user_valuesvalue行。

另外,decrease_time可以是0或1,0意味着它應該減少每1小時,1表示它應該每24小時降低。我已經實現了一個if子句來檢測它是否是早上6點,然後它應該減少所有值,如果它們是1或0.

我應該做什麼查詢?此外,這是在PHP中完成的。

編輯:我所做的一切,到目前爲止是這樣的:UPDATE user_values SET value = value - (SELECT decrease_value FROM decrease_times WHERE property=/* property from UPDATE clase should be here */) WHERE property=(SELECT property FROM decrease_times WHERE decrease_time=0)

回答

2

你並不需要使用select語句任何地方...

UPDATE user_values AS values 
INNER JOIN decrease_times AS times ON values.property = times.property 
SET values.value = values.value-times.decrease_value 
WHERE values.property = times.property AND times.decrease_time = 0 

你把你的表,你是要編輯,並加入它與第二個表的查詢......你用簡單的數學方程組的值字段您user_values表你n eed,並確保兩個屬性值相同,並且您只更新每小時意圖更新的行。

你每天的版本是相同的,但不需要「還有......」起

+0

謝謝,我不知道這些關鍵工作。這工作 – Pacha 2013-02-28 00:36:45

-1

像這樣UPDATE TABLE SET your_value=(your_value-1) WHERE USERID=5

UPDATE TABLE1 SET your_value=(your_value +(SELECT your_value2+5 FROM TABLE2 WHERE USERID=5)) WHERE USERID=5

- 它適應您的需求;這是基本的SQL語法。

需要更好的例子,你的表結構 - 您可以使用http://sqlfiddle.com/並重新創建你的一些表/數據的,所以我們可以用它玩

http://www.w3schools.com/sql/sql_update.asp

+0

沒有幫助太多,因爲我不想被一個以降低自己的價值,但由金額在另一個表中。 – Pacha 2013-02-28 00:22:39

+0

然後在UPDATE子句中選擇你的另一個表 – Andrew 2013-02-28 00:23:43

+0

表結構全部展開......它不需要比@Pacha有更好的解釋。一開始表不是TABLE1,它是user_values ... – niaccurshi 2013-02-28 00:24:11

相關問題