PHP/MySQL查询优化?

PHP/MySQL查询优化?,php,mysql,optimization,foreach,query-optimization,Php,Mysql,Optimization,Foreach,Query Optimization,我有一个查询,它的工作原理和它应该的一样,但是,我想优化它以使用更少的查询 下面的代码来自我为公告板系统创建的一个用户插件 $types = array('numposts', 'numthreads', 'numreps'); $medals = ""; foreach($types as $type) { $query = $db->query(" SELECT u.*, m.* FROM ".TABLE_PREFIX."medals_".$

我有一个查询,它的工作原理和它应该的一样,但是,我想优化它以使用更少的查询

下面的代码来自我为公告板系统创建的一个用户插件

$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']."\" /> ";
    }
}
$types=array('numposts','numthreads','numreps');
$奖牌=”;
foreach($type作为$type)
{
$query=$db->query(“
选择u.*,m.*
FROM“.TABLE_PREFIX.”奖牌“.$type.”m
左连接“.TABLE_PREFIX.”u ON(m.“$type.”上的符号。\u id=u.awid)
其中awuid=''.intval($post['uid'])。“'和type='.$type.”
按“`.$type.”排序。“描述限制1”
"); 
而($results=$db->fetch_数组($query))
{
$奖牌=“”;
}
}
对于每个帖子,它运行此查询以显示用户的奖牌。根据帖子的数量,查询将乘以三。所以,例如,如果一个线程有10个帖子…10x3是30…这就是仅此代码执行的30个查询


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

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


然后,当您开始显示帖子时,您可以返回奖牌列表并调出用户的奖牌。如果(比如)你的10篇帖子只有2个人在聊天,那么你就需要一个查询,获取2x3=6行数据(2个用户x 3种奖牌),以及一些内存来存储奖牌结果,而你实际获取/显示帖子。

因为“帖子数”是更严重的乘数,我们不应该也看到那个代码吗?这只是一个插件…posts表已经通过公告板的核心代码链接进来了。它只获取显示其帖子的用户的奖牌,但它对每个帖子执行此查询。我只想对线程中的每个用户执行一次此查询。如果您无法向上移动代码并将其附加到获取后代码,则使用静态变量存储用户ID及其奖牌数据。仅当用户ID不在该静态数组中时才执行查询。如果是,则返回数组数据。否则,获取数据,将其存储在数组中,然后返回数组数据。请您再详细解释一下,好吗?也许可以提供一个示例代码。