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