我想在我的mysql数据库中添加很多行。对于每一行,我需要在数据库中进行搜索。我将描述我现在是如何做的,但必须有一个更好的方法。
在while循环中,我通过一个数组循环,在该数组中我有数据,我需要插入value1,value2,value3的值。
然后我做SELECT id FROM table WHERE column='value3';
之后我INSERT INTO insertTable VALUES (value1, value2, id);
此方法会导致大量查询。可能的改进可能是不是对插入进行排队,而是将插入值再次放入数组中并在结尾处创建多插入。但是仍然有很多SELECT查询。
任何提示如何改善这一点?
答案 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中声明,所以你有一个查询。