0

我有大约 360 行数据,我需要为 SQL 进行 360 查询,有没有什么快速的方法可以将所有数据放入一个查询中,而不必将它们全部分开,例如这里只有 3 行数据我有:

   1,81,32
   1,101,82
   1,60,65

我必须将这些数据变成查询,所以这 3 个看起来像:

   INSERT INTO `Fixtures` (weeks, HomeID, AwayID) Values (1,81,32);
   INSERT INTO `Fixtures` (weeks, HomeID, AwayID) Values (1,101,82);
   INSERT INTO `Fixtures` (weeks, HomeID, AwayID) Values (2,60,65);

但是我有 360 行这样的,所以很难将这些全部变成查询的 1 by 1,有没有更快的方法来做到这一点,就像一个查询将它们全部插入一样?

4

3 回答 3

2

您通常可以使用 INSERT...SELECT 语法。

此语法因数据库而异,但通常类似于:

INSERT INTO `Fixtures` (weeks, HomeID, AwayID) 
select 1,81,32
union all select 3,31,22

另一种变化是:

INSERT INTO Fixtures
    (`weeks`, `HomeID`, `AwayID`)
VALUES
    (1, 81, 32),
    (3, 31, 22)
;
于 2012-11-01T14:38:03.643 回答
1

我假设 MySQL 是因为您已使用 PHP 对其进行了标记,但大多数数据库都允许在一个查询中进行多次插入,因此您的查询如下所示:

INSERT INTO `Fixtures` (weeks, HomeID, AwayID) Values (1,81,32), (1,101,82), (2,60,65);

还是您的意思是通过代码而不是手动制作插入文本。在这种情况下,我们需要知道数据现在在哪里。

于 2012-11-01T14:39:54.147 回答
1

如果它在一个文件中,使用file(),它将逐行分隔它们。

$file = 'test.txt';

$lines = file($file); 

foreach ($lines as $line)
{
  // Can build an output of the inserts to use as an .sql file, or actually call the db to insert
  $output .= 'INSERT INTO Fixtures (weeks, HomeID, AwayID) Values (' . trim($line) . ')'; 
}
于 2012-11-01T14:40:16.183 回答