我遇到了问题,想要制作一个如果字段存在则会更新的查询,如果不存在则插入新的查询。问题是id不是唯一的,所以我不能使用ON DUPLICATE KEY UPDATE
我尝试过IF EXISTS解决方案
IF EXISTS (select * from wordpress.wp_4_postmeta where post_id=3466 and meta_key='_job_expires')
THEN
update wp_4_postmeta set meta_value='2017-06-25' where post_id=3466 and meta_key='_job_expires'
ELSE
insert into wordpress.wp_4_postmeta (post_id,meta_key,meta_value) values (3466,'_job_expires','2017-09-25')
并尝试了ROWCOUNT
UPDATE wordpress.wp_4_postmeta
SET meta_value='01-01-2685'
WHERE post_id=3471
IF @@ROWCOUNT = 0
INSERT INTO wordpress.wp_4_postmeta (post_id,meta_key,meta_value)
VALUES (3471,'_job_expires','2017-09-25')
但没有运气。我如何在一个查询中执行此操作?
我还附加数据库表的图片,看看发生了什么。 post_id不是唯一的,可能有很多相同的post_id与不同的meta_key-s。
这也是尝试过,ON DUPLICATE KEY
但没有运气
insert into wordpress.wp_4_postmeta (post_id, meta_key, meta_value)
values (3466, '_job_expires', '2011-06-25')
on duplicate key update meta_value='2011-06-25';
答案 0 :(得分:1)
正确的解决方案是on duplicate key update
。
首先,您需要一个唯一的密钥post_id, meta_key
:
create unique index unq_postmeta_post_metakey on wordpress.wp_4_postmeta(post_id, meta_key);
然后您可以使用on duplicate key update
:
insert into wordpress.wp_4_postmeta (post_id, meta_key, meta_value)
values (3466, '_job_expires', '2017-09-25')
on duplicate key update meta_value='2017-06-25';
我注意到两个日期不同。这是故意的吗?