0

我正在学习 MySQL 和 PHP(运行 XAMPP 并且还使用 HeidiSQL),但是有一个我正在尝试使用它而不是信息当前所在的大量电子表格的实时工作项目。

我想将 1,000 多行导入到表 (tbl_searches) 中,其中一列是字符串 (contract_no)。tbl_searches 所需的电子表格中没有的信息包括 search_id(PK 并且是 AUTO_INCREMENT)和contract_id。所以我真正缺少的唯一字段是contract_id。我有一个包含contract_id 和contract_no 的表(tbl_contracts)。所以我想我可以让导入使用字符串contract_no来引用该表来获取contract_no的contract_id,但我不知道如何。

[编辑] 我忘了提到在我将 tbl_contracts 导出到 Excel 之后,我已经使用 HeidiSQL 成功导入了信息,然后将其用于 Excel VLOOKUP 函数,但最终以某种方式产生了不正确的数据。

4

3 回答 3

2

你可以这样做

LOAD DATA LOCAL INFILE '/path/to/your/file.csv' 
INTO TABLE table1 
  FIELDS TERMINATED BY ',' 
         OPTIONALLY ENCLOSED BY '"' 
  LINES TERMINATED BY '\n' -- or '\r\n' if the file has been prepared on Windows
(@field1, @contract_no, @field2, @field3,...) 
SET column1 = @field1,
    contract_id = (SELECT contract_id 
                     FROM tbl_contracts 
                    WHERE contract_no = @contract_no 
                    LIMIT 1),
    column2 = @field2,
    column3 = @field3
    ...
于 2013-08-10T08:41:44.840 回答
0

尝试这样的事情:(我假设您在 tbl_contracts 中有数据)

<?php
  $handle = fopen("data_for_table_searches.csv", "r"); 

  while (($data = fgetcsv($handle,",")) !== FALSE) {  // get CSV data from you file
    $contract_id = query("SELECT contract_id FROM tbl_contracts WHERE contract_number = " . $data[<row for contract number>]);   // whatever is the equivalent in heidi SQL, to get contract id
    query("INSERT INTO tbl_searches values($contract_id, data[0], data[1], data[2],...)");  // whatever is the equivalent in heidi SQL, insert data, including contract id into tbl_searches
  }
  fclose($handle);
?>
于 2013-08-10T08:51:17.557 回答
0

感谢大家的意见。彼得姆的指导帮助我导入了数据。Rahul,我应该提到我没有使用 PHP 来完成这项任务,而只是尝试使用 HeidiSQL 将数据放入表中。user4035 要求提供更多详细信息,所以也在这里。

我在数据库中有三个表。

  1. tbl_status 有两个字段,status_ID (AUTO_INCREMENT) 和 status_name。
  2. tbl_contracts 有两列,contract_ID (AUTO_INCREMENT) 和contract_no(一个字符串)。
  3. 最后一个表 (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

如果您对我最终编写查询的方式有任何建议的改进,请告诉我。

-马特

于 2013-08-11T13:01:49.790 回答