-1

我有 2 张桌子:user_valuesdecrease_times.

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

我有一个每小时都会调用一次的 cron 作业,我想要做的是减少所有value行 fromuser_values存储在decrease_valueif propertyfromuser_values等于propertyfrom的数量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)

4

2 回答 2

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...”

于 2013-02-28T00:33:58.603 回答
-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

于 2013-02-28T00:20:52.967 回答