php - 一个脚本中包含大量 SELECT 和 INSERTS

标签 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 查询。

有什么改进的线索吗?

最佳答案

这是一种方法,

您可以构建一个表来包含所有 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/

相关文章:

php - 向 PHP 数组添加一列

javascript - LinqJs - 使用非重复计数进行分组

mysql - 当新客户与回访客户 SQL 中的日期范围发生更改时删除重复项

php随机丢失部分 session

javascript - 在 php 页面上如何使用 mysql 在第 n 行之后插入行

php - 在 Laravel 5 应用程序中创建外键时出现错误

mysql - 在 MySql 中,如何将 csv 文件中的 sql 字符串中的空值导出为双引号 ("")?

sql - Sequelize : SequelizeUniqueConstraintError get conflicting row

php - 为什么这个sql查询只返回两个结果?

php - 使用 simpleXML 解析打印缩略图 - 如何全部返回?