Php 如果MySQL中不存在记录,则将记录插入到具有特殊条件的特定列中
我有一个CSV文件,我想将其插入到一个表中(我们称之为my_table) 对于此任务,我将CSV文件加载到一个新的临时表中,该临时表名为temp\u table(具有与my\u table相同的功能/结构)。不存在的值应插入到my_表中 但是,必须满足某些条件: 如果my_表中的列字母中的值不存在,则:Php 如果MySQL中不存在记录,则将记录插入到具有特殊条件的特定列中,php,mysql,csv,Php,Mysql,Csv,我有一个CSV文件,我想将其插入到一个表中(我们称之为my_table) 对于此任务,我将CSV文件加载到一个新的临时表中,该临时表名为temp\u table(具有与my\u table相同的功能/结构)。不存在的值应插入到my_表中 但是,必须满足某些条件: 如果my_表中的列字母中的值不存在,则: 将“字母”中的值插入my_表的字母列中 同时将'num'值插入my_表中的num列 如果值'letter'存在,但'num'中的值在my_表中丢失,请更新列'num'中的记录 以下是临时表格(左
INSERT INTO my_table (letter)
SELECT DISTINCT letter FROM temp_table
WHERE NOT EXISTS
(SELECT * FROM my_table WHERE my_table.letter = temp_table.letter);
上面提到的方法部分完成了这项工作。它插入不以字母形式存在的值。但是第二部分呢?插入列num中缺少字母行的行?如示例的第2行所示。。
为此,我尝试:
INSERT INTO my_table (letter, num)
SELECT DISTINCT letter, num FROM temp_table
WHERE NOT EXISTS
(SELECT * FROM my_table WHERE my_table.letter = temp_table.letter
AND my_table.num = temp_table.num);
然而,这并没有像我想要的那样起作用。
尽管它确实跳过了第一行,并且确实插入了第(2)行,因为它应该这样做:
2 aac 123
但是,它也插入了行:
letter num
1 aab 123
2 aac 123
3 bba
4 bba 234
作为新的一行,这不应该发生!因为bba已经存在,这是第3部分的条件
如前所述,应插入列num的值,当且仅当列字母中的行存在时 如果您对
letter
有唯一的约束,那么您可以使用MySQL的语法,并为num
列添加一点逻辑:
INSERT INTO my_table (letter, num)
SELECT letter, num FROM temp_table
ON DUPLICATE KEY UPDATE
num = COALESCE(num, VALUES(num));
你想要一个插入吗?嗨,实际上我想插入没有重复的。但我想我也需要字母中的值已经存在的地方,但不是在NUMCA上,你能用其他方式解释吗?在给定的示例中,插入第二条记录/行并更新第三条。Ok。我为在这个问题上减少一点的人添加了一个带有示例的编辑。。为什么?相反,为什么不提供一个解决方案呢?!或者至少解释一下你自己!
INSERT INTO my_table (letter, num)
SELECT letter, num FROM temp_table
ON DUPLICATE KEY UPDATE
num = COALESCE(num, VALUES(num));