Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果MySQL中不存在记录,则将记录插入到具有特殊条件的特定列中_Php_Mysql_Csv - Fatal编程技术网

Php 如果MySQL中不存在记录,则将记录插入到具有特殊条件的特定列中

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'中的记录 以下是临时表格(左

我有一个CSV文件,我想将其插入到一个表中(我们称之为my_table

对于此任务,我将CSV文件加载到一个新的临时表中,该临时表名为temp\u table(具有与my\u table相同的功能/结构)。不存在的值应插入到my_表中 但是,必须满足某些条件:

如果my_表中的列字母中的值不存在,则:

  • 将“字母”中的值插入my_表的字母列中
  • 同时将'num'值插入my_表中的num列
  • 如果值'letter'存在,但'num'中的值在my_表中丢失,请更新列'num'中的记录

    以下是临时表格(左)和我的表格(右)中的表格示例:

    *订单(id)不重要

    编辑:因此您可以看到第1行中的值没有插入到my_表中,因为值aab已经存在。 在第二行中,aac不存在,因此它与num的值一起插入。 在第三行中,需要更新bba,其中num列获取值

    有人知道如何在MySQL中实现吗

    或者尝试用PHP编写会更容易/更有意义吗

    附加: 这是我到目前为止为了克服第1部分而提出的-

    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));