0

我已经读过这个:

仅当值已更改时,如何插入数据库?

所以我的问题非常接近,但并不完全相同。

我有一个包含 4 个“主”列的表(即我的所有表上都有这 4 个相同的列):

  • id- int - autoinc
  • id_origin- int - 创建第一条记录时的 id
  • date_v_start- datetime - 记录有效期的开始日期
  • date_v_end- 日期时间 - 记录的有效期结束(如果NULL它是当前的“有效”记录)

以下是此表特有的一些其他字段: - summary- 文本 - detail- 文本

知道了这一点,当我将某些东西更改为该表时,这就是我所做的:

  • date_v_end将当前记录更新为“now()”
  • 我插入一条新记录,其中date_v_start=date_v_end前一个,id_origin= 与前一个相同,- date_v_end=NULL和(当然)新值summaryand detail

我的问题是,如果summaryand的值detail没有改变,我不想插入新记录,这是浪费时间和硬盘空间。

有没有办法(如果可能的话,一次性)像:

“如果summary<>'a value' or detail<>'another value' then update this record and insert this new one

?

所以,我的问题和我上面提供的链接之间的区别是: - 有多个字段要比较 - 有两个请求 - 如果可能,我想在一个请求中进行。

4

1 回答 1

0

以下是我在一个“php 查询”= 一个中间带逗号的字符串中的做法(这非常耗时,但如果我的网络服务器无法再处理它,我会在某一天更改它):

CREATE TEMPORARY TABLE tmp
SELECT * FROM table
WHERE id=:id;
ALTER TABLE tmp drop ID;
INSERT INTO table
SELECT 0,tmp.* FROM tmp;
DROP TABLE tmp:
UPDATE table
SET date_v_fin=NOW()
WHERE id=LAST_INSERT_ID();
于 2012-04-27T09:17:32.467 回答