【问题标题】:How to update new value to current field and transfer current value to old field?如何将新值更新到当前字段并将当前值转移到旧字段?
【发布时间】:2017-12-06 23:13:43
【问题描述】:

我有一个每天从 API 更新的 MySQL 表,但现在我想跟踪已从 API 更新的特定字段。我想用当前字段(值)更改更新行并将旧字段(值)保留在另一个字段中。 有人可以指出我正确的方向吗?最好的做法是什么?

表格(原版)

---------------------------------
|ID | Input Date | Expired Date |
---------------------------------
| 2 | 2017-05-17 | 2017-12-19   |   
---------------------------------
| 3 | 2017-07-09 | 2018-05-19   |
---------------------------------

更新时的表(当前)

---------------------------------
|ID | Input Date | Expired Date |
---------------------------------
| 2 | 2017-05-17 | 2018-05-28   |  <----- ID 2: Expired Date updated
---------------------------------
| 3 | 2017-07-09 | 2018-05-19   |
---------------------------------

表已更新并保留旧字段值

------------------------------------------------
|ID | Input Date | Expired Date | Old Exp Date |
------------------------------------------------
| 2 | 2017-05-17 | 2018-05-28   | 2017-12-19   |  
------------------------------------------------    
| 3 | 2017-07-09 | 2018-05-19   |              | 
------------------------------------------------

我希望这有点道理,请帮忙..非常感谢:)

【问题讨论】:

  • 你用来更新字段的程序,你为什么不能让它做你要求的事情?
  • 你要纯SQL方案还是PHP方案?
  • PHP 和 mySQL 都可以工作@fe

标签: php mysql rets


【解决方案1】:

你可以为它创建一个触发器

CREATE TRIGGER date_updated BEFORE UPDATE ON <your table name>
       FOR EACH ROW SET <old exp date column> = OLD.<expired date column>

在 PostgreSQL 中,您可以使用 RETURNING 子句

UPDATE <table name> SET <column> = <value> RETURNING <column>

【讨论】:

    【解决方案2】:

    我发现了两种方法:

    A.对数据库使用 2 个查询
    - 使用表中的过期日期值更新旧过期日期
    - 使用 API 中的新值更新过期日期

    B.使用单个查询
    - 您可以尝试同时设置两个字段,但您应该对其进行测试
    - 就像 SET Old Exp Date = Expired date, Expired date = API_VALUE

    某些实现没有相同的 UPDATE 顺序:
    sql-update-order-of-evaluation

    您应该对其进行测试,看看它在您的系统上是如何工作的。如果它有效,那么您应该确定是否存在任何可移植性问题的风险。

    亲切的问候,

    【讨论】:

      【解决方案3】:

      你可以简单地尝试类似这样的mysql查询,

      UPDATE your_table_name 
      SET `Old Exp Date` = `Expired Date`, 
      `Expired Date` = "$api_value";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多