我想在我的 mysql 数据库中添加很多行。对于每一行,我都需要在数据库中进行搜索。我将描述我现在是如何做的,但一定有更好的方法。
在 while 循环中,我循环遍历一个数组,其中有数据,我需要插入 value1、value2、value3 的值。
然后我执行 SELECT id FROM table WHERE column='value3';
之后我INSERT INTO insertTable VALUES (value1, value2, id);
此方法会导致大量查询。一个可能的改进可能是不再对插入进行排队,而是将插入值再次放入数组中,并在末尾创建一个多重插入。但仍然有很多 SELECT 查询。
有什么改进的线索吗?
最佳答案
这是一种方法,
您可以构建一个表来包含所有 value1、value2、value3 值 就像在循环中构建类似于以下的语句:
第一次通过循环时,将你的sql语句设置为类似的内容
CREATE TABLE T SELECT value1 as value1 ,value2 as value2,value3 as value3
然后每次通过循环将你的sql语句设置为追加
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。
或者,如果您愿意,您可以在不创建 Table T 的情况下构建 SELECT UNION 查询,然后将该查询放在括号中并将其放在 FROM
之后。和之前 T
直接在 INSERT 语句中,这样您就只有一个查询。
关于php - 一个脚本中包含大量 SELECT 和 INSERTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38033225/