PHP/MySQL查询优化


PHP/MySQL Query Optimization?

我有一个查询,就像它应该的工作,但是,我想优化它使用更少的查询。

下面的代码是来自一个用户奖牌插件,我正在创建一个公告板系统。

$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']."'" /> ";
    }
}

对于每个帖子,它运行这个查询来显示用户的奖章。根据帖子的数量,查询将乘以3。所以,例如,如果一个线程有10个帖子…10 × 3 = 30…这段代码执行了30个查询。

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

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

当您开始显示帖子时,您可以引用奖牌列表并调出用户的奖牌。如果你的10个帖子只有2个人聊天,这将花费你一个查询来获取2x3=6行数据(2个用户x3种类型的奖章),以及一些内存来存储奖章结果,而你实际获取/显示帖子。