【问题标题】:Input CSV File and upload it to MySQL DB输入 CSV 文件并上传到 MySQL DB
【发布时间】:2015-06-02 15:35:52
【问题描述】:

编辑2:

好吧,我找到了一个适合我的解决方案,字符串将保存在 $v[0][0], [1][0], [2][0] ... 仍然不是完美的,但我应该这样工作。

代码:(分隔符:“;”和“\n”)

$csvData = file_get_contents("data.csv");
$lines = preg_split("/[\n,;]+/", $csvData);
$array = array();
foreach($lines as $line){ $array[]= str_getcsv($line);}

编辑: 将 CSV 保存到数组可以解决我的问题,我会在 sql 插入中使用数组中的索引。

我尝试了以下代码,但它对我不起作用...

$csv = array_map('str_getcsv', file('data.csv'));

.

$csvData = file_get_contents($fileName);
$lines = explode(PHP_EOL, $csvData);
$array = array();
foreach ($lines as $line) {
$array[] = str_getcsv($line);
}
print_r($array);

当我回显 $array[0][0] 时,它会显示 HOWL 行。我真的不明白...第二个是这里的最佳答案:PHP CSV string to array

我必须像这样上传一个 csv 文件:

  • 类别;问题;a1;a2;a3;a4
  • 1;问题;a1;a2;a3;a4
  • 2;问题;a1;a2;a3;a4
  • 2;问题;a1;a2;a3;a4

现在我必须将此问题添加到我的问题表中,我的问题是每个类别都从特定的 id 开始:cat 1 从 1 开始,cat 2 在 1000 开始,cat 3 在 2000 ...

例如:类别 2 的最后一个问题的 id 为 1012,因此 csv 文件中包含 cat 2 的问题需要插入到 1013 和 1014。

我的想法是,在插入 csv 之前,我会计算每个类别的行数,然后手动插入 ID。 (例如:cat 2 有 12 行,+ 1001 将是第一个新问题的 id)

有谁知道我怎样才能完成这项工作?

【问题讨论】:

    标签: php mysql csv mysqli


    【解决方案1】:

    首先将 CSV 加载到另一个表中。

    LOAD DATA INFILE '/path/to/file.csv'
    INTO TABLE tmp_table_name
    FIELDS TERMINATED BY ';'
    LINES TERMINATED BY '\n'
    ;
    
    • 阅读有关此命令的更多信息here

    然后计算insert语句中的id

    INSERT INTO questions (id, cat, question, a1, a2, a3, a4)
    SELECT 
    cat - 1 + 1000 + sq.number as id,
    cat, question, a1, a2, a3, a4
    FROM tmp_table_name t
    JOIN (SELECT cat, count(*) as number FROM tmp_table_name GROUP BY cat) sq
    ON t.cat = sq.cat
    

    P.S.:像 a1、a2、a3 和 a4 这样的列名(我假设 a 是答案的缩写?)闻起来像是非常糟糕的数据库设计。将答案放在单独的表格和一栏中。

    Table questions:
    id
    cat
    questionId
    question
    answers
    

    Table answers:
    questionId
    answer
    

    表格通过 questionId 链接

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2014-06-15
      相关资源
      最近更新 更多