php - 输入CSV文件并将其上传到MySQL DB

标签 php mysql csv mysqli

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

当我 echo $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 文件中类别 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'
;
  • 了解有关此命令的更多信息 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 链接

关于php - 输入CSV文件并将其上传到MySQL DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29332342/

相关文章:

php - 如何使用 php 发出 http 请求并获得响应

php - Laravel SQL 查询返回重复项

java - MySQL JDBC 连接器无法编译?

python脚本输出保存在不同的文件夹中

java - (CSVWriter) java.io.FileNotFoundException : C:\output. csv(访问被拒绝)

php - Twitter API - 实时收听用户的推文

javascript - 一旦渲染成 HTML 和 CSS,就生成 php 页面的一部分的 PDF,并考虑 pdf 分页符

php:Mysql:题库数据库设计

html - 如何在 textarea 中显示实际的 HTML 代码而不是呈现的 HTML?

C 将逗号分隔的字符串转换为数组