我记录了我的网站的查询数量,并在页面中运行以下脚本,向页面添加了40个额外的查询。
如何将此sql连接更改为propper并点亮
function tree_set($index)
{
//global $menu; Remove this.
$q=mysql_query("select id,name,parent from cats where parent='$index'");
if(mysql_num_rows($q) === 0)
{
return;
}
// User $tree instead of the $menu global as this way there shouldn't be any data duplication
$tree = $index > 0 ? '<ul>' : ''; // If we are on index 0 then we don't need the enclosing ul
while($arr=mysql_fetch_assoc($q))
{
$subFileCount=mysql_query("select id,name,parent from cats where parent='{$arr['id']}'");
if(mysql_num_rows($subFileCount) > 0)
{
$class = 'folder';
}
else
{
$class = 'file';
}
$tree .= '<li>';
$tree .= '<span class="'.$class.'">'.$arr['name'].'</span>';
$tree .=tree_set("".$arr['id']."");
$tree .= '</li>'."\n";
}
$tree .= $index > 0 ? '</ul>' : ''; // If we are on index 0 then we don't need the enclosing ul
return $tree;
}
//variable $menu must be defined before the function call
$menu = '....<ul id="browser" class="filetree">'."\n";
$menu .= tree_set(0);
$menu .= '</ul>';
echo $menu;
我听说,这可以通过将其更改为数组来完成,但我不知道该怎么做
提前致谢
答案 0 :(得分:2)
试试这个(未经测试的代码):
function tree_set($index)
{
//global $menu; Remove this.
$q=mysql_query("select id,name,parent from cats where parent='$index'");
if(mysql_num_rows($q) === 0)
return;
$cats = array();
$cat_ids = array();
while($arr=mysql_fetch_assoc($q))
{
$id = intval($arr['id']);
$cats[$id] = $arr;
}
$subFilesCountQuery="select parent,count(*) as subFileCount from cats where parent=".
join(" OR parent=",array_keys($cats))." GROUP BY parent";
$subFileCountResult=mysql_query($subFilesCountQuery);
while($arr=mysql_fetch_assoc($subFileCountResult))
{
$id = intval($arr['parent']);
$cats[$id]['subFileCount'] = $arr['subFileCount'];
}
// If we are on index 0 then we don't need the enclosing ul
$tree = $index > 0 ? '<ul>' : '';
foreach($cats as $id => $cat)
{
if($cat['subFileCount'] > 0)
$class = 'folder';
else
$class = 'file';
$tree .= '<li>';
$tree .= '<span class="'.$class.'">'.$arr['name'].'</span>';
$tree .=tree_set("".$arr['id']."");
$tree .= '</li>'."\n";
}
$tree .= $index > 0 ? '</ul>' : '';
我正在做的是两个查询:一个用于获取所有类别(您的原始第一个查询),然后是第二个查询以一次性获取所有子类别计数。我还将所有类别存储在一个可以循环访问的数组中,而不是在从数据库中提取时显示。
答案 1 :(得分:0)
可以通过将数据复制到数组中,然后使用该副本来完成:即
while($arr=mysql_fetch_assoc($q))
{
$results[] = $arr;
}
稍后,您可以在$ results
上执行任何操作您的代码的主要问题是您将显示逻辑与SQL查询混合在一起。
答案 2 :(得分:-1)
在单个查询中选择整个树,例如“select id,name,parent from cats”。迭代结果,在PHP中构建代表树的数组,然后使用数组作为源
绘制HTML