0

2 つの列に基づいてデータを置き換えたいテーブルがあります。

私のクエリは現在次のようになっています。

$query = "REPLACE INTO `".$database."`.`".$table_extras."` (`id`, `multiverseid`, `rulings`, `printings`, `foreignNames`) ";
$query .= "VALUES (".$cardCount.",
    ".$multiverseid.",
    '".addslashes($rulings)."',
    '".addslashes($printings)."',
    '".addslashes($foreignNames)."');";

現在、上記のクエリでは、「id」に基づいて置き換えられます。「id」と「multiverseid」に基づいて置き換えるようにするにはどうすればよいですか?

テーブルを作成すると、次のようになりました。

CREATE TABLE IF NOT EXISTS `extras` (
  `id` int(10) unsigned NOT NULL,
  `multiverseid` int(10) unsigned NOT NULL,
  `number` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `rulings` text COLLATE utf8_unicode_ci NOT NULL,
  `printings` text COLLATE utf8_unicode_ci NOT NULL,
  `foreignNames` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`, `number`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
4

3 に答える 3

1

、 に一意のインデックスを作成しidますmultiverseid

create unique index t_id_multiverseid on table_extras(id, multiverseid);

唯一の問題は次のとおりです。がすでに一意であるか主キーである場合idは、置換によって引き続き使用されます。この制約を削除する必要があります。

于 2013-09-01T23:42:39.607 に答える
0

REPLACE INTO主キーまたは一意のインデックスに基づいて置き換えます。

id と multiverseid に一意のインデックスを作成します。

create unique index table_extras_id_multiverseid on table_extras(id, multiverseid);

ドキュメントには次のように記載されています。

テーブルの古い行が PRIMARY KEY または UNIQUE インデックスの新しい行と同じ値を持つ場合、新しい行が挿入される前に古い行が削除されます。

于 2013-09-01T23:44:48.707 に答える
0

テーブルの主キーは「id」のようです。これにより、質問を解析するのが少し難しくなります:)

おそらく、実際の意図は、id 列と multiverseid 列の両方に主キーを持つテーブルを作成することです。その場合、REPLACE は必要に応じて機能します。

于 2013-09-01T23:46:52.570 に答える