根据您的查询,如果我们需要考虑优化,我们将考虑一些情况。
情况1:
正如您所提到的,您可能会有60个链接*5个类别,这些非常容易从mysql方面处理。我们可以很好地使用SQL技术本身,并从中获得好处。
总是可以有PHP处理+ SQL的混合。 PHP的处理速度比mysql快。所以,抓住它。
您的查询也可以仅通过SQL解决,并且可以简单地使用Paolo提到的查询。
情况2:
有些情况下,参与表格之一或两者都具有太多的记录。 当两个表之间存在联接时,结果会产生大量组合即联接大小。
例如:链接(100,000)*类别(10)= 1百万
在这些情况下,您可以尝试避免连接。
您可以利用索引。
索引用于快速查找特定列值的行。 没有索引,MySQL必须从第一行开始,然后读取整个表以找到相关行。
有一些技术,比如无模式数据库(如MongoDB)使用的平面文件,不使用连接的概念。但如果你计划在一个庞大的网站上运行它(庞大意味着你需要很多服务器来托管它),那么你需要考虑一些东西。
MySQL可以很好地扩展,当你处于一个非常庞大的环境中时,你必须想出一些解决方案。
在这里,我已经解决了您的查询,而没有使用连接和任何依赖查询。我只是获取结果并仅使用数组映射技术,这样更快。
$query = mysql_query("SELECT * FROM category order by `order` asc");
while($row = mysql_fetch_assoc($query) ) {
$categories[$row['id']]['cat'] = $row['cat'];
$categories[$row['id']]['order'] = $row['order'];
}
$query = mysql_query("SELECT * FROM links ORDER BY `order` ASC ");
$count =0;
while($row = mysql_fetch_assoc($query) ) {
$links[$row['cat-id']][$count]['link'] = $row['link'];
$links[$row['cat-id']][$count]['order'] = $row['order'];
$links[$row['cat-id']][$count]['cat-id'] = $row['cat-id'];
$count++;
}
foreach ($categories as $id=$value) {
foreach ($links[$id] as $link_info) {
if ($last_cat != $link_info['cat-id'])
print '<h3' . $categories[$link_info['cat-id']]['cat'] . '</h3';
print $link_info['link'] . '<br';
$last_cat = $link_info['cat-id'];
} }