我有个密码:
<?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;
想法:有一张table 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
2条答案
按热度按时间kognpnkq1#
janmyszkier提出了一个很好的观点,因为您的表似乎缺少键和/或索引。这些简单的查询不应该破坏您的系统。
至于优化当前sql,您可以通过连接两个表将两个select语句合并为一个select语句:
确保在egn和clientegn列上有索引,以加速连接。
请注意,您的代码示例引用了一个名为“姓氏”的列,但该列在您提供的表定义中不存在。我用了第二个名字,因为它似乎是最好的匹配。
bfrts1fy2#
首先,确保表有索引(如果没有索引)
clientEGN
添加一个(添加索引)。这应该会加快你的搜索查询“一点”一旦你添加了索引,如果你的代码仍然需要优化,请告诉我们。代码不是最优的,但是易于理解和维护。我可以建议在if-within中使用join和updatejoined,但这会使代码更复杂,而且对于初级开发人员来说维护起来更麻烦,所以在这一点上,我不建议更改您当前拥有的代码。