3

我需要能够使用 mysqli->multi_query 在一个查询调用中运行以下所有内容,这就是为什么这很棘手。我有一个包含以下列的表:

  • ID
  • 电子邮件
  • event_promo_code
  • event_id

id运行脚本时,如果AND都event_id匹配现有记录(不仅仅是一个键或另一个键),我需要能够插入新行或更新一行。

我现在拥有的是:

INSERT INTO `rsvps` 
SET id='$rsvpID', email='$rsvpEmail', 
      event_promo_code='$rsvpEventCode', event_id='$eventID' 
ON DUPLICATE KEY UPDATE id='$rsvpID', 
      email='$rsvpEmail', event_promo_code='$rsvpEventCode', event_id='$eventID';

id是我的主键。如果我也设置event_id为键,它会在 id 匹配记录或事件匹配记录时进行更新,但不会在更新之前检查两者是否同时匹配。

4

3 回答 3

4

升级到答案

表上的唯一UNIQUE约束应该在组合列上定义(id, event_id)。听起来这可能也应该是您的主键:

ALTER TABLE rsvps DROP PRIMARY KEY, ADD PRIMARY KEY (id, eventid);

(显然,您还需要已定义的DROP任何其他键)。UNIQUE

于 2012-05-25T21:04:49.613 回答
3

考虑使用REPLACE命令。id对于您的情况,从and创建唯一索引event_id

REPLACE 的工作方式与 INSERT 完全相同,只是如果表中的旧行与 PRIMARY KEY 或 UNIQUE 索引的新行具有相同的值,则在插入新行之前删除旧行。请参见第 13.2.5 节,“INSERT 语法”。

于 2012-05-25T20:54:40.260 回答
0
INSERT INTO rsvps (id, email, event_promo_code, event_id)
 values('$rsvpID', '$rsvpEmail', '$rsvpEventCode', '$eventID')
 ON DUPLICATE KEY 
 UPDATE id='$rsvpID', email='$rsvpEmail', event_promo_code='$rsvpEventCode', event_id='$eventID';
于 2012-05-25T20:54:23.490 回答