【问题标题】:Import multiple CSV fields into one MySQL field将多个 CSV 字段导入一个 MySQL 字段
【发布时间】:2017-02-05 20:05:38
【问题描述】:

我有一张这样的桌子

mytable(`id` int, 'number1' varchar(11), 'number2' varchar(1200))

我也有类似 cvs 的文件

111111111,222222222,333333333,44444444,,,
222222222,333333333,
111111111,555555555,666666666,

它们用“,”(或其他东西)分隔 csv 有 100 列。

我想将第 100 个 loumn 的第二列合并到 mysql "number2" 中, 第一列进入mysql“number1”。

像这样:

id number1    number 2
1  111111111  222222222,333333333,44444444
2  222222222  333333333
3  111111111  555555555,666666666

那么我可以使用 LOAD DATA INFILE 将文件加载到表中吗?我怎样才能做到这一点..?还是有其他方法?

谢谢。

【问题讨论】:

    标签: python mysql csv


    【解决方案1】:

    这是一个选项,它创建一个 new 列,将第 2 列到第 100 列组合起来:

    LOAD DATA INFILE 'input.csv'
    INTO TABLE myTable
    COLUMNS TERMINATED BY ','
    IGNORE 1 LINES 
    (id, number1, number2, ..., number99) 
    SET newCol = CONCAT(NULLIF(number1, ''), NULLIF(number2, ''), ..., NULLIF(number99, ''));
    

    然后,您可以从 MySQL 中删除第 2 到 100 列:

    ALTER TABLE myTable
    DROP COLUMN number1,
    DROP COLUMN number2,
    ...
    DROP COLUMN number99
    

    【讨论】:

    • 这个方法太复杂,必须建99列。不过谢谢。
    • 我不明白为什么这种方法在概念上很困难。 AFAIK 在聚合然后删除时无法避免提及列。实施可能需要 5 分钟的工作时间。
    • 非常感谢。我有个问题。在 csv 中,有些列是空的,“concat”如何避免这些列。仅合并具有数值的列。
    • @user3804623 在可能具有NULL 的每一列上使用NULLIFCOALESCE,并将NULL 替换为您想要的任何值。
    【解决方案2】:

    可以使用file()函数打开cvs文件;

    使用explode(',', $each_line)函数将每一行与,分开,

    我没有看清楚你的需求,我觉得简单的代码可以这样:

    $file_items = file('file.cvs');
    foreach($file_items as $item) {
        $item_arr = explode(',', $item);
        // combine $item_arr[0]... $item_arr[99] ,you get $number1, $number2;
        $sql_insert = "INSERT INTO mytable (number1, number2) VALUES(number1, $number2)";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-29
      • 2012-06-01
      • 2017-02-13
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 2013-10-16
      • 2011-06-10
      相关资源
      最近更新 更多