使用mysql基于前一行设置记录集中的修改标志

时间:2017-01-13 21:01:04

标签: mysql sql-update mariadb

我有下表post

pk    id               title     title_mod      author    author_mod
--------------------------------------------------------------------
001    1             Foo Bar             1       Homer             1
002    1             Foo Bar             0        Bart             1
003    1             Foo-Bar             1        Bart             0
004    2         Hello World             1       Marge             1
005    2   Hello Springfield             1       Marge             0
006    2         Hello World             1       Homer             1    
007    3     Marge's recipes             1       Homer             1
008    3     Marge's recipes             0       Marge             1
009    3     Marge's recipes             0       Marge             0

现在,我需要根据前一行填写*_mod个字段,例如如果更改title,则title_mod变为'1',否则变为'0'。如果更改了id,则每个*_mod字段都会变为“1”。

有没有办法在MySql / MariaDb中使用简单的'Update'语句执行此操作? (或者我需要一些脚本?)TIA。

1 个答案:

答案 0 :(得分:1)

我认为你可以做这样的事情。

UPDATE post
SET id = new_id,
  title = new_title,
  title_mod = if( id != new_id, /* then */ 1, /* else */ if( title != new_title, /* then */ 1, /* else */ 0 ) )
  etc

另一种选择是使用BEFORE UPDATE触发器并使用相同的逻辑。