我正在使用附加到MySQL数据库的PHP中的CSV导入脚本。我想让用户可以选择在找到重复项时插入新行或更新它们。
我无法使用ON DUPLICATE KEY UPDATE因为该列不能是唯一的,否则它不会满足他们想要重复的时间。
我该怎么做?
答案 0 :(得分:2)
使用2个查询 - 一个选择查询来确定该行是否存在,然后根据该结果进行插入或更新查询。
答案 1 :(得分:1)
我会编写脚本以便在命令行中使用。在循环中,检查是否已存在具有相同键的条目。如果是,则提示用户决定使用fgets(STDIN)做什么。
答案 2 :(得分:0)
为什么不在表中添加UNIQUE
键,可能跨越多个字段?
这是一个给出以下简单电话簿表的例子:
CREATE TABLE phonebook (
firstname VARCHAR(255),
lastname VARCHAR(255),
home VARCHAR(50),
mobile VARCHAR(50)
)
您可以轻松添加一个密钥,将名字和姓氏组合在一起。
ALTER TABLE phonebook ADD UNIQUE (firstname, lastname)
这样,当名称已在列表中时,您可以使用ON DUPLICATE KEY UPDATE
语句轻松更新电话号码:
INSERT INTO phonebook (firstname, lastname, home, mobile)
VALUES ("john", "doe", "12345", "45678")
ON DUPLICATE KEY UPDATE home = "12345", mobile = "45678"
其他一切都变得越来越复杂。