2

在我的网页中,有一个 CSV 导入部分。用户可能会导入数千条记录。我需要将 csv 详细信息插入到 2 个表中。

第一个表包含基本信息。第二个包含其他附加信息。所以我需要将第一个表的插入 ID 保存到第二个表中。

针对以上需求,我写了2条mysql语句。但是导入需要更多时间。在这里,是否可以使用单个查询将记录插入到 2 个表中?

请指教。

4

6 回答 6

1

您不能一次插入两个表(因为您需要第一个表中的 id),但您可以为第一个表一个接一个地插入,为第二个表插入一个查询,如下所示:

$main_data = array('data1', 'data2', 'data3');
  $new_data = array();

    foreach($main_data as $data) {

      mysql_query("insert into table1 (data) values ('$data')");

      $new_id = mysql_insert_id();

      // Save the new id into an array + the data
      $new_data[$new_id] = $main;

    }

    $insert_into = array();

    // Create a new insert statement
    foreach($new_data as $new_key => $data) {
        $insert_into[] . "($new_key, '$data')"
    }

    $imploded_data = implode(',', $insert_into);

    if (count($insert_into) > 0) {

        // The result will be something like Insert into `table2` (id, value) values (1, 'data1'), (2, 'data2'),(3, 'data3');
        mysql_query("insert into `table2` (id, value) values $imploded_data");
    }
于 2013-10-11T12:40:57.567 回答
1

试试这个方法。。

   $main_data = array('dino', 'babu', 'john');

    foreach($main_data as $main) {

      // Insert main to 1st table
      mysql_query("MY INSERT QUERY TO TABLE 1");

      // Get the last insert id
      $new_id = mysql_insert_id();

      // Insert the sub data to 2nd table using the insert id
      mysql_query("MY INSERT QUERY TO TABLE 2 USING $new_id ");
    }
于 2013-10-11T10:38:31.233 回答
0

既然你没有分享你的模式,我会用同样的方式告诉你故事:)

我会走这条路

步骤 1.old_max_import_id =select max(id) from csv_imports;

步骤 2. 将数据导入csv_imports

步骤 3.csv_imports2通过运行以下单个查询将相同的数据复制到

insert into csv_imports2(fielda,fieldb,fieldc......)
   select fielda,fieldb,fieldc .....from csv_imports
      where id > old_max_import_id;

我认为你可以在 yii 中轻松实现这一点。我假设您正在将 csv 数据导入到表中Insertion。如果您通过 csv 导入进行更新,则策略将发生显着变化。在这种情况下,csv_imports表上的插入/更新触发器将对您有所帮助。

于 2013-10-11T17:56:05.170 回答
0

不,您一次只能插入 1 个表。

于 2013-10-11T10:33:26.613 回答
0

因为您对 CSV 的每一行都运行了一个查询,所以花费了更多时间。尝试一次连接所有 SQL 语句并全部执行。

insert into table_one (First, Last) values ('Fred','Smith'),
  ('John','Smith'),
  ('Michael','Smith'),
  ('Robert','Smith');

insert into table_two (First, Last) values ('Fred','Smith'),
  ('John','Smith'),
  ('Michael','Smith'),
  ('Robert','Smith');
于 2013-10-12T23:04:26.090 回答
0

使用事务(http://dev.mysql.com/doc/refman/5.0/en/commit.html)来维护数据的原子性。

于 2013-10-11T13:14:09.177 回答