php - 将数据从 CSV 文件插入到现有表中

标签 php mysql sql csv

我有一个表,博客,有 3 列。

| id | post_category | post_tags
--------------------------------
| 1  | NULL          | example

我有一个 categories.csv 文件,遵循类似的格式:

1, "News"
<小时/>

我想在表中的 id=1 位置插入“新闻”。但是,CSV 文件的长度为+100 行。那么我该如何循环并执行此操作呢?

<小时/>

重要提示:CSV 文件确实有多个对同一 ID 的引用,但具有不同的类别名称。这些需要用“,”分隔

表格(结果)

| id | post_category | post_tags
--------------------------------
| 1  | "News, Shoes" | Shoes

 CSV(文件)

id, post_category
1, "News"
1, "Shoes"

最佳答案

您可以首先解析 CSV 文件并创建一个由 ID 索引的数组,值是与 ID 相对应的类别数组。然后你运行这个数组并执行 SQL 查询(我们只是输出它们)。

$fp = fopen("./file.csv", "r"); # insert path to CSV file here
$categories = [];
$firstLine = TRUE;
while ($line = fgetcsv($fp)) {
  if ($firstLine) { # skip first line of CSV file with header
    $firstLine = FALSE;
    continue;
  }
  if (count($line) < 2)
    continue;
  if (!isset($categories($line[0]))
    $categories[$line[0]] = [];
  $categories[$line[0]][] = $line[1];
}
fclose($fp);
foreach ($categories as $id => $v) {
  echo "INSERT INTO `blog`(`id`, `post_category`)
        VALUES (".$id.", '".implode(', ', $v)."';<br>";
}

但我建议修改您的数据库布局,这样您就不会在单个列中存储用逗号分隔的多个值。

关于php - 将数据从 CSV 文件插入到现有表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40492107/

相关文章:

javascript - 使用 AJAX 添加 select onchange

php - Yii 验证码没有改变

c# - 嗨,我有 table 。表格的 col rev_levl 具有 01 int 值。我需要为当前值添加 +01

php - mysql 列中的最低自由值

javascript - 在 JSON 文件中搜索

php - CodeIgniter 子域路由最佳实践

php - Laravel 插入多个表和多个数据

php - HMVC 和文件夹中的 View (Codeigniter)

sql - 如何查询 SQL Server XML 列中的值

php - 用下划线替换 URL 中的空格