2012-11-01 62 views
0

我有大约360行数据,我需要在360查询的SQL中进行,是否有任何快速的方法将所有数据放入一个查询中,而不必将它们全部放在单独的位置,例如这里只有3行数据我有:使用大量数据创建查询的最佳方式是什么?

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

我不得不做出这个数据到查询的所以这三个看起来像:

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,有没有更快的方式做到这一点,就像只有一个查询插入它们全部?

+0

你的数据在哪里 – Marc

+1

如果这是一个.csv文件,那么'LOAD DATA INFILE'可以很容易地处理,没有任何“黑客” –

回答

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

我假定MySQL的因为你这个标签使用PHP,但多数任何数据库将允许multiple inserts in one query,所以您的查询将如下所示:

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

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

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) . ')'; 
} 
相关问题