感谢大家的意见。彼得姆的指导帮助我导入了数据。Rahul,我应该提到我没有使用 PHP 来完成这项任务,而只是尝试使用 HeidiSQL 将数据放入表中。user4035 要求提供更多详细信息,所以也在这里。
我在数据库中有三个表。
- tbl_status 有两个字段,status_ID (AUTO_INCREMENT) 和 status_name。
- tbl_contracts 有两列,contract_ID (AUTO_INCREMENT) 和contract_no(一个字符串)。
- 最后一个表 (tbl_searches) 将是 active(?) 表,因为这是记录用户操作的地方。
这些表中的前两个很容易填充。tbl_status 有 11 行将描述合同的状态,这些只是输入到 Excel 电子表格中,并通过 HeidiSQL 通过 CSV 导入。
对于第二个表,我有 1,000 多个“合同”要导入,因此我将 Excel 中的第一列留空,第二列包含合同字符串并以相同的方式导入它们。
第三张表有 7 个字段:search_id (AUTO_INCREMENT)、contract_id、contract_no、status_id、notes、initials 和 search_date(刚才我忘了那个)。
我想将包含搜索信息的电子表格插入 tbl_searches。它有contract_no,但没有contract_id。我需要插入行并让查询从 tbl_contracts 中获取contract_id。我花了一点时间才把它弄好,没有错误和一些意想不到的结果。(以下查询省略了 search_date 的需要。)
LOAD DATA LOCAL INFILE '\\\\PATH\\PATH\\PATH\\PATH\\FILENAME.csv'
INTO TABLE `hoa_work`.`tbl_searches`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n'
IGNORE 1 LINES --because the first row of the CSV has column headers
(@search_id, @contract_id, @contract_no, @status_id, @notes, @initials)
SET
search_id = NULL, --is an AUTO_INCREMENT field
contract_id = (SELECT contract_id
FROM tbl_contracts
WHERE contract_no = @contract_no
LIMIT 1),
contract_no = @contract_no,
status_id = @status_id,
notes = @notes,
initials = @initials;
/* Affected rows: 1,011 Found rows: 0 Warnings: 0 Duration for 1 query: 0.406 sec. */
我在这里了解到@blah 是用户变量。如果我运行以下查询,它将告诉我变量是如何定义的。因为我从 CSV 文件中插入了 1,000 多行,所以它给了我插入的最后一行的答案。
SELECT @contract_no
如果您对我最终编写查询的方式有任何建议的改进,请告诉我。
-马特