【问题标题】:SQL CSV file - Skipping all columns after a certain column numberSQL CSV 文件 - 在某个列号之后跳过所有列
【发布时间】:2017-01-19 20:41:34
【问题描述】:

我这几天一直有问题,而且碰上了砖墙。首先,正如标题所示,我一直在努力将 CSV 文件导入 SQL 数据库。

更具体地说,这是通过服务器上的 PHP 脚本和通过 MySQL 进入数据库来完成的。

我目前有大约 30 个 CSV 文件(这个数字预计会增加)每天更新,然后每天触发一次 cron 脚本来更新新数据。它通过LOAD DATA INFILE 加载文件。所有这一切都完美无缺。

问题是: 每个 CSV 文件包含不同的列数。列数介于 50-56 列之间。我存储在这个集体数据库中的数据只需要前 8 列。由于以下问答,我已经知道如何使用@dummy 跳过各个列:How to skip columns in CSV file when importing into MySQL table using LOAD DATA INFILE?

但是,由于列数不同,虚拟计数并不总是相同,我想知道是否有办法从第 1-8 列获取数据,然后忽略所有列数?

【问题讨论】:

  • 我现在无法测试,但是只包括要填充的八列呢? LOAD DATA INFILE 'file.txt' INTO TABLE t1 (c1, c2, c3, c4, c5, c6, c7, c7, c8)
  • 这实际上工作得很好。以前,我尝试过类似的方法,但正在生成“未知列数”。谢谢
  • 很好,请接受答案。

标签: php mysql csv


【解决方案1】:

一个相当粗略的补丁是首先读取 php 中的开始行,以逗号计算列。然后知道数量,减去 8 并生成 sql 命令,现在知道您需要忽略多少列。

【讨论】:

    【解决方案2】:

    只需包含要填充的八列,我们将使用 CSV 行中的前八列:

    LOAD DATA INFILE 'file.txt' INTO TABLE t1 (c1, c2, c3, c4, c5, c6, c7, c8)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多