SQL:在更新期间获取列的值

时间:2012-09-04 16:21:06

标签: php mysql

使用PHP和MySQL,我的查询看起来像这样:

UPDATE mytable 
   SET status='$newstatus' 
 WHERE (col1='$col1[0]'AND col2='$col2[0]') 
   OR (col1='$col1[1]'AND col2='$col2[1]') 
   OR (...);

我实际上需要在更新之前记录每个行的当前“状态”。在此之前我是否需要单独执行SELECT,或者可以(应该/如何)将两个查询组合在一起?

3 个答案:

答案 0 :(得分:1)

你无法从这个查询中得到它(你只能得到受影响的行数,但那就是它)。如果您需要,您应首先按照以下条件SELECT进行:

SELECT `id` FROM `mytable`
WHERE (`col1`='$col1[0]' AND `col2`='$col2[0]')
   OR (`col1`='$col1[1]' AND `col2`='$col2[1]')
   OR (...)

然后使用获取的UPDATEWHERE进行id。我不建议您使用当前UPDATE子句WHERE同时(在您的SELECTUPDATE之间)db内容可能会更改,因此您可以更新不同的行你有SELECT编辑。或者使用表锁定(但我认为这里没有意义)。

答案 1 :(得分:1)

Mysql中没有OUTPUT子句。您需要在更新之前读取状态,或者创建一个在其他表中存储OLD.status值的触发器。

答案 2 :(得分:0)

在更新之前,您无法使用单个查询来更新行并记录当前状态。

你最好有一个“日志表”,你的“表格”的模式加上时间戳,但它只存储历史数据,一行的状态时间点,就像版本控制系统一样。

示例:

用户:ID,用户名,电子邮件,电话

用户日志:ID,用户名,电子邮件,电话,时间戳

因此,在更新表User上的行之前,您首先要执行SELECT和INSERT,如下所示:

insert into UserLog
select Id, Username, Email, Telephone, Now()  from User where Id=$Id