0

我已经四处寻找这个问题的答案并且遇到了 IGNORE 和 WHERE NOT EXISTS 但是它们似乎都与我想要完成的事情略有不同。我的MYSQL表如下所示:

id(自增 INT)、字符名(VARCHAR)、字符区域(VARCHAR)、字符域(VARCHAR)

我的数据是从一个网站检索到的,该网站返回游戏的所有角色,甚至是我数据库中已有的角色。

我希望保留所有字符的列表,但不要重复。我的问题似乎是我需要比较角色的名称、领域和地区,然后再决定它是否重复,因为相同的名称可以出现在不同的地区/领域组合中。

我尝试比较 3 个非自动递增列的所有值,如下所示:

替换为字符 ( charactername, characterregion, characterrealm) 值 ('Peter','AMERICA','Realm1') WHERE NOT EXISTS(SELECT * FROM characters WHERE charactername='Peter' AND characterregion='AMERICA' AND characterrealm='Realm1')

然而,这会返回一个 MYSQL 错误,因为语法不正确。我也尝试过 INSERT IGNORE INTO... 但这似乎只是在检查 id 值。我认为我根本不需要检查 id,因为我已将其设置为自动递增。

任何帮助将不胜感激,如果有帮助,我将在其他部分使用 PHP。再次感谢。

4

1 回答 1

1

只需在所有 3 列上添加一个复合索引。

alter ignore table mytable add unique index(charactername, characterregion, characterrealm);

然后做

INSERT INTO characters (charactername, characterregion, characterrealm)  
VALUES ('Peter','AMERICA','Realm1')  
ON DUPLICATE KEY 
UPDATE
charactername='Peter1',characterregion='AMERICA1',characterrealm='Realm11'

仅当所有 3 列都相同时才会触发更新。或者您可以只执行 INSERT,如果所有 3 列相同,它将失败。

于 2013-11-10T12:52:17.977 回答