使用大量数据创建查询的最佳方法是什么?

时间:2012-11-01 14:36:13

标签: php mysql sql

我有大约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对1中,有没有更快的方法来做到这一点,只需要一个查询来插入它们?

3 个答案:

答案 0 :(得分:2)

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

此语法因db而异,但通常类似于:

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)
;

答案 1 :(得分:1)

我假设MySQL是因为你用PHP标记了这个,但是大多数数据库都允许multiple inserts in one query,所以你的查询看起来像:

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

或者您的意思是通过代码而不是手工制作插入文本。在这种情况下,我们需要知道数据的位置。

答案 2 :(得分: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) . ')'; 
}