使用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,或者可以(应该/如何)将两个查询组合在一起?
答案 0 :(得分:1)
你无法从这个查询中得到它(你只能得到受影响的行数,但那就是它)。如果您需要,您应首先按照以下条件SELECT
进行:
SELECT `id` FROM `mytable`
WHERE (`col1`='$col1[0]' AND `col2`='$col2[0]')
OR (`col1`='$col1[1]' AND `col2`='$col2[1]')
OR (...)
然后使用获取的UPDATE
与WHERE
进行id
。我不建议您使用当前UPDATE
子句WHERE
同时(在您的SELECT
和UPDATE
之间)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