一个脚本

时间:2016-06-25 21:43:59

标签: php mysql sql select sql-insert

我想在我的mysql数据库中添加很多行。对于每一行,我需要在数据库中进行搜索。我将描述我现在是如何做的,但必须有一个更好的方法。

在while循环中,我通过一个数组循环,在该数组中我有数据,我需要插入value1,value2,value3的值。

然后我做SELECT id FROM table WHERE column='value3';

之后我INSERT INTO insertTable VALUES (value1, value2, id);

此方法会导致大量查询。可能的改进可能是不是对插入进行排队,而是将插入值再次放入数组中并在结尾处创建多插入。但是仍然有很多SELECT查询。

任何提示如何改善这一点?

1 个答案:

答案 0 :(得分:1)

这是一种方式,

您可以构建一个表来包含所有value1,value2,value3值 就像在循环中构建一个类似于下面的语句:

第一次循环使你的sqlstatement变成类似

的东西
CREATE TABLE T SELECT value1 as value1 ,value2 as value2,value3 as value3

然后每次通过循环设置你的sqlstatement后追加

UNION SELECT value1, value2, value3

然后执行该sql语句,使表T带有您的值。

然后你可以像这样运行一个INSERT。

INSERT INTO insertTable(value1,value2,id)
SELECT T.value1,T.value2,`table`.id
FROM T INNER JOIN `table` ON `table`.`column` = T.value3;

这是一个sqlfiddle示例http://sqlfiddle.com/#!9/58daf/1

然后您可以在之后删除表T.

或者如果你愿意,你可以在没有创建表T的情况下构建SELECT UNION查询,只需将该查询放在括号中,并将其放在FROM之后和T之前直接插入INSERT中声明,所以你有一个查询。