我有一个表格,我想根据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;
答案 0 :(得分:1)
在id
,multiverseid
:
create unique index t_id_multiverseid on table_extras(id, multiverseid);
唯一的问题如下。如果id
已经是唯一的或主键,则替换将继续使用它。您需要放弃此约束。
答案 1 :(得分:0)
REPLACE INTO
根据主键或唯一索引替换。
在id和multiverseid上创建一个唯一索引:
create unique index table_extras_id_multiverseid on table_extras(id, multiverseid);
如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。
答案 2 :(得分:0)
听起来桌子的主键是“id”。这使得解析你的问题变得有点困难:)
也许你的实际意图是在id和multiverseid列上都有一个包含主键的表,在这种情况下你的REPLACE可以按你的要求工作。