gpt4 book ai didi

php - 如何使用 SQL 查询优化 while 循环?

转载 作者:行者123 更新时间:2023-11-29 22:02:01 25 4
gpt4 key购买 nike

$id = $user['id']; // the ID of the logged in user, we are retrieving his friends
$friends = $db->query("SELECT * FROM friend_requests WHERE accepted='1' AND (user1='".$id."' OR user2='".$id."') ORDER BY id DESC");

while($friend = $friends->fetch_array()) {
$fr = $db->query("SELECT id,profile_picture,age,full_name,last_active FROM users WHERE (id='".$friend['user1']."' OR id='".$friend['user2']."') AND id != '".$id."'")->fetch_array();
echo $fr['age'];
}

我基本上是在遍历我所有的 friend ,并获取有关每个 friend 的信息。

我之前会如何优化这个,我知道考虑到有成千上万的“ friend ”,多次运行这个查询是低效的,但我不太确定如何去优化它。感谢任何帮助,谢谢。

最佳答案

评论里的那篇文章很棒。您肯定会想要弄清楚如何自己编写联接。这是我为你写的尝试。当您重写查询时,您可能不希望 *friend_requests 中的列(或任何列,因为您将使用联接)。您拉动的任何列都必须加载到内存中,因此您可以避免拉动的任何列都会有所帮助。特别是如果您的 PHP 服务器和 DB 服务器不在同一台计算机上(网络上的数据较少)。

无论如何,这是我在黑暗中拍摄的:

$id = $user['id'];

$friends = $db->prepare("
SELECT
freq.*
,users.id AS users_id
,users.profile_picture
,users.age
,users.full_name
,users.last_active
FROM friend_requests freq
INNER JOIN users u ON users.id IN (freq.user1,freq.user2) AND freq.id != u.id
WHERE
freq.accepted='1'
AND ? IN (freq.user1,freq.user2
ORDER BY freq.id DESC");
if($friends) {

$friends->bindParam("s",$id);

if($friends->execute()) {
// get_result() only works if you have the MySQL native driver.
// You'll find out real quick if you don't
$myFriends = $friends->get_result();

while($row = $myFriends->fetch_assoc()) {
echo $row['age'];
}
}
}
else {
printf("SQL Error: %s.<br>\n", $friends->error);
}
// cleanup
$friends->close();

快速引用:get_result()

关于php - 如何使用 SQL 查询优化 while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32545326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com