2013-02-28 75 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

相关问题