ai didi

php - 我如何优化更新 mysql 表的代码?

转载 作者:行者123 更新时间:2023-11-29 01:49:18 24 4
gpt4 key购买 nike

我有这段代码:

<?php
require_once('../assets/db/DBConnect.php');
$conn = DBConnect::conn();

echo "<pre>";
$usersWithoutSurnames = [];
$usersWithSurnames = [];
$i = 0;

$query = 'SELECT * FROM person where surName IS NULL';
$res = $conn->query($query);
while($row = $res->fetch_assoc()) {
if ($i > 7)
break;
$usersWithoutSurnames[] = $row;
$i++;
}

foreach ($usersWithoutSurnames as $user) {
$getSurnameQuery = 'SELECT clientSecondname from policy WHERE clientEGN = ? ORDER BY id DESC LIMIT 1';

if($stmt = $conn->prepare($getSurnameQuery)) {
$egn = $user['egn'];
$stmt->bind_param("s", $egn);

$r = $stmt->execute();

$stmt->bind_result($clientSecondname);
$stmt->fetch();
$user['surName'] = $clientSecondname;
$usersWithSurnames[] = $user;
$stmt->close();
}
}

var_dump($usersWithoutSurnames);
echo '-------------------------------------------------';
echo "<pre>"; var_dump($usersWithSurnames); exit;

想法:有一张表有users (person) 但有些用户没有姓氏,所以我检查另一个table (policy) 以获取他们的姓氏,并用相同的用户但姓氏填充第二个数组,之后我将用这个数组填充和表格。您可以看到我只有 7 个用户,因为当我尝试让更多用户超时时,我可以优化此代码/查询以与更多用户一起工作吗?

表结构:

人:

|------------------------------------------------
| Id | firstName | secondName | lastName | EGN
| 1 | test | NULL | test | 123
| 2 | test | NULL | test | 321

政策:

|------------------------------------------------------------------------
| Id | clientFirstname | clientSecondname | clientLastname | clientEGN
| 1 | test | test | test | 123
| 2 | test | test | test | 321

最佳答案

janmyszkier 提出了一个很好的观点,因为您的表似乎缺少键和/或索引。这些简单的查询不应削弱您的系统。

至于优化当前的 SQL,您可以通过连接两个表将两个 select 语句合并为一个:

select 
person.*,
policy.clientSecondname
from person
left join policy on policy.clientEGN = person.EGN
where person.secondName is null

确保您在 EGN 和 clientEGN 列上有索引以加速连接。

请注意,您的代码示例引用名为“surName”的列,但该列不存在于您提供的表定义中。我改用了 secondName,因为它看起来是最匹配的。

关于php - 我如何优化更新 mysql 表的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52100531/

24 4 0
文章推荐: MySQL,可以防止两个字段为 NULL 或 NOT NULL 吗?
文章推荐: android - 当用户开始使用android设备时如何启动后台服务?
文章推荐: android - 评级栏不在单行中显示全明星
文章推荐: android - onbackpressed 用于画廊 Intent ,Android
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com