gpt4 book ai didi

PHP/MySQL 查询优化?

转载 作者:行者123 更新时间:2023-11-29 14:45:23 25 4
gpt4 key购买 nike

我有一个查询,它的工作原理与预期的一样,但是,我想对其进行优化以使用更少的查询。

以下代码来 self 为公告板系统创建的用户奖牌插件。

$types = array('numposts', 'numthreads', 'numreps');
$medals = "";

foreach($types as $type)
{
$query = $db->query("
SELECT u.*, m.*
FROM ".TABLE_PREFIX."medals_".$type." m
LEFT JOIN ".TABLE_PREFIX."medals u ON (m.".$type."_id=u.awid)
WHERE awuid='".intval($post['uid'])."' AND type='".$type."'
ORDER BY `".$type."` DESC LIMIT 1
");

while($results = $db->fetch_array($query))
{
$medals .= "<img src=\"uploads/medals/".$results['icon']."\" border=\"0\" alt=\"".$results['descrition']."\" title=\"".$results['description']."\" /> ";
}
}

对于每个帖子,它都会运行此查询来显示用户的奖牌。根据帖子数量,查询次数会增加三倍。因此,例如,如果一个线程有 10 个帖子...10x3 是 30...这就是仅此代码执行的 30 个查询。

优化此操作以减少查询的最佳方法是什么?也许缓存?我不太擅长优化,所以我在这里征求您的意见。

最佳答案

帖子表中的链接,因此您只能为那些帖子实际显示的用户获取奖牌。如果您单独运行此查询,则每个用户只能获得 1 条奖牌列表记录,您可以将其存储在数组或其他变量中。

当您开始显示帖子时,您可以返回奖牌列表并调出用户的奖牌。如果(假设)您的 10 个帖子只有 2 个人在聊天,这会花费您一个查询来获取 2x3=6 行数据(2 个用户 x 3 种类型的奖牌),并需要一些内存来存储奖牌结果,而您实际上获取/显示帖子。

关于PHP/MySQL 查询优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7068042/

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