【发布时间】:2011-10-27 10:30:22
【问题描述】:
我有一个按预期工作的查询,但是,我想优化它以使用更少的查询。
以下代码来自我为公告板系统创建的用户奖牌插件。
$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 个查询。
优化它以使用更少查询的最佳方法是什么?也许缓存?我不太擅长优化,所以在这里征求您的意见。
【问题讨论】:
-
既然“帖子数”是更严重的乘数,我们不应该也看到这段代码吗?
标签: php mysql optimization foreach query-optimization