输入CSV文件并上传到MySQL数据库


Input CSV File and upload it to MySQL DB

第2版:

我找到了一个适合我的解决方案,字符串将保存在$v[0]、[1][0]、[2][0]中。。。仍然没有表现,但我应该那样工作。

代码:(分隔符:";"answers"''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字符串到数组

我必须上传一个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文件中类别2的问题需要插入1013和1014。

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

有人知道我该怎么做吗?

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

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

然后计算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

附言:像a1、a2、a3和a4(我想a是答案的缩写?)这样的列名闻起来像是非常糟糕的数据库设计。把答案放在一个单独的表格里,放在一列里。

Table questions:
id
cat
questionId
question
answers

Table answers:
questionId
answer

表格通过questionId 链接