【发布时间】:2017-07-03 08:54:16
【问题描述】:
我在服务器端使用 php 来管理 MySQL 数据。 我必须请求一个提供用户列表的 API。我需要检查每个用户是否在数据库中。 如果是,我会更新他的信息。 如果没有,我将他插入数据库。
问题是每次都有超过 2000 多个用户,我的 PHP 代码真的很慢(有时我得到 504 Gateway Time-out)。 我们很快就会拥有更多用户。
如何让我的代码更快? php可以吗?
改进后编辑我的codeV3:
$userList = getFromAPI();
foreach ($userList as $userId){
$db = dbConnect();
$tagList = implode(",", $user["tagid_list"]);
$query = $db->prepare(
"INSERT INTO USERS(id, name, group) VALUES(:id, :name, :group)
ON DUPLICATE KEY UPDATE name=values(name), group=values(group)"
);
$query->execute([
"id"=>$id,
"name"=>$name,
"group"=>$group
]);
}
【问题讨论】:
-
我猜你的问题是数据库语句。
-
您是否考虑过
select id from users where id = :userid并查看它是否返回一行?或者,如何舍弃这部分内容,改为使用insert into users ... on duplicate key update ...? -
在检查数据库中是否存在特定用户时不要获取每个用户,修改您的选择以通过您要检查的 id 选择....然后您也可以消除它array_column() 和 in_array() 检查
-
@NiettheDarkAbsol 我用我的新代码更新我的帖子,并在重复键更新时插入。但它似乎不起作用。 “id”列是我的主键。
-
@MarkBaker 感谢您的建议,我已经修改了选择并放了一个“!empty()”来检查是否有结果。如果您有任何改进,请使用我的新代码编辑帖子