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 回答