我有2个表:user_values
和decrease_times
。
user_values
有3列:username, property, value
而decrease_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)
答案 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/并重新创建一些表/数据,以便我们可以使用它