繁体   English   中英

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

[英]What is the best way to create a query with a big set of data?

我有大约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中,请问有没有更快的方法,就像将一个查询全部插入一样?

通常可以使用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)
;

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

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

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

如果在文件中,请使用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) . ')'; 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM