我已经读过这个:
How do I insert into a database only if a value has changed?
所以我的问题非常接近,但这并不是一样的。
我有一个包含4个“主”列的表(即我的所有表中都有4个相同的列):
id
- int - autoinc id_origin
- int - 创建第一条记录时的ID date_v_start
- 日期时间 - 记录有效期的开始日期date_v_end
- 日期时间 - 记录有效期结束(如果NULL
是当前“有效”记录)以下是此表特有的其他一些字段:
- summary
- 文字
- detail
- 文字
知道这一点,当我将某些内容更改为该表时,这就是我所做的:
date_v_end
更新为“now()”date_v_start
= date_v_end
,id_origin
=与之前相同,date_v_end
= NULL
和(当然)summary
和detail
的新价值。我的问题是,如果summary
和detail
的值没有改变,我不想插入新记录,这是浪费时间和硬盘空间。
有没有办法(如果可能的话,一次性):
“if summary<>'a value' or detail<>'another value' then update this record and insert this new one
”
所以,我的问题和我上面提供的链接之间的区别是: - 有多个字段可供比较 - 有两个请求 - 如果可能的话,我想在一个请求中提出。
答案 0 :(得分: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();