3

mysqli->multi_query を使用して 1 回のクエリ呼び出しで次のすべてを実行できるようにする必要があるため、これが難しいのです。次の列で構成されるテーブルがあります。

  • ID
  • Eメール
  • event_promo_code
  • event_id

idスクリプトが実行されるとき、両方のANDevent_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ます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 に答える