Mysql从另一个表中减少值

时间:2013-02-28 00:18:12

标签: php mysql

我有2个表:user_valuesdecrease_times

user_values有3列:username, property, valuedecrease_times有3列:property, decrease_value, decrease_time。所有这些都是动态的,并且变化很大。

我有一个每小时调用一次的cron作业,我想要做的是从value减少所有user_values行,decrease_value如果property } user_values来自property等于decrease_times

此外,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 个答案:

答案 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表上设置值字段,并确保两者都有属性值相同,并且您只更新每小时要更新的行。

您的每日版本将是相同的,但不需要“AND ...”开始

答案 1 :(得分:-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