如何解析 CSV 并导入到 MYSQL 问题

How to parse CSV and import to MYSQL issue

此刻我真的卡住了..我搜索和研究并没有找到类似的东西,所以我想要的可能是行不通的。

我有一个这种格式的 .xls 文件

|contact| col1  |col2  |  col3  |
---------------------------------
|name1   | info1 |info2 | info3  |
|address1|       |      |        |
|phone1  |       |      |        |
|        |       |      |        |
|name2   |       |      |        | 
|address2| info1 |info2 | info3  |
|phone2  |       |      |        |
|        |       |      |        | 
|name_n  | info1 | info2| info3  |
|addres_n|       |      |        |
|phone_n |       |      |        |
----------------------------------

所以我在考虑创建一个 table ,一个叫做 contact,另一个叫做 info。 table 联系人将包含 id(主键)、姓名、地址和 phone 作为字段。另一个 table 带有 id(主键)、name(外键)、col1、col2 和 col3。这样一来,如果我想知道名称的详细信息(在 table 信息中),我可以转到另一个 table 并查看所有值。

所以我研究了如何导入这个xls格式文件,最佳解决方案是将xls文件转换为逗号分隔的csv文件。

因此,我想使用的代码是(在转换为 csv- 以逗号分隔后)如下:

但重点是我只想做到以下几点:

与“信息”相关Table

LOAD DATA INFILE '/home/username/myfile.csv' 
INTO TABLE numbers FIELDS TERMINATED BY ';' 
LINES STARTING BY '-' TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(contact,col1,col2,col3);

当我填充 table 时没问题,因为我只需要在要填充到 table 的行的开头添加一个“-”(该行其中包含一个非空字段。)

与“联系人”相关table:

比较难,如果我想只取contact那一栏就得加点符号再操作。好吧,我想在 name1 的开头添加一个“*”(例如),在 phone1 的末尾添加另一个用于定义 LINE 的边界。但我也想定义字段,这将是一个';'以及。但是,LOAD DATA INFILE 算法也采用空字段。我只想获取包含不同于“空字符串”/“空”/的内容的字段。所以问题是我是否能够说些什么来避免出现空字符串。因为正如我在 MySQL DOC 中读到的那样:

An empty field value is interpreted different from a missing field:

For string types, the column is set to the empty string.

For numeric types, the column is set to 0.

For date and time types, the column is set to the appropriate “zero” value for >the type. See Section 11.3, “Date and Time Types”.

但它并没有说要避免它。 (我的意思是,如果是一个空值,则传递下一个字段并再次评估,直到找到一个非空值)

我这么问是因为按照我的想法,它会像这样填充一行: Name1,null,null,null,address1,null,null,null,phone1 等等。

有什么想法吗?

在 Excel 中,您可以创建两个工作表,第一个包含联系人数据,第二个包含信息数据。这些工作表可以单独导出为 csv 文件。

现在只关注联系人,如果您的 excel 电子表格有 4 列,其中 columnA 是对所有行的 N 操作。如果您最终想要在 真实 table.

中使用它,请将其更改为 Y

您的 csv 现在有 4 列:

行动,姓名,地址,phone

load data infile变成了作品table。现在你有了你的数据(有些不是真正想要的),并且一个 insert into select where action='y' 将完成它,进入你的 real table 来自 作品table.