将foreach php查询转换为SQL

时间:2013-04-01 01:16:54

标签: php mysql query-optimization

由于我有一个大型数据库,因此我有两个执行速度相当慢的php函数。一个人要求提供类别名称。另一个使子类别计数。下面,我尝试过转换为SQL来加速查询但不确定如何解决foreach循环,或者这是否是最有效的SQL查询方法。感谢您的反馈。

第一个:

function GetCatName($catid){
global $db, $dblang, $the_cats;

foreach($the_cats as $cat){
    if($cat->category_id == $catid && $cat->category_lang == $dblang)
    {
        $x = $cat->category_name;
    }
}
return $x;
}

重写为SQL:

function GetCatName($catid){
global $db, $dblang;

$sql = "SELECT category_name FROM ".table_categories." where category_id = ".$catid." and category_lang = ".$dblang.";";

$x = $db->get_result($sql);

return $x;
}

第二个:

  function GetSubCatCount($catid){
global $db, $the_cats;

$count = 0;

foreach($the_cats as $cat){
    if(isset($cat->category_parent)){
        if($cat->category_parent == $catid && $cat->category__auto_id <> 0 && $cat->category_lang == $dblang)
        { 
            $count = $count + 1;
        }
    }
}

return $count;
}

重写为SQL:

function GetSubCatCount($catid){
global $db, $the_cats;

$count = 0;

foreach($the_cats as $cat){
    if(isset($cat->category_parent)){
    $sub_cateogories = $db->get_results("SELECT * FROM ".table_categories." where category_parent = ".$cat->category__auto_id." and category_order = 0 AND category__auto_id<>0;");
    $count = count($sub_cateogories);
    }
}

return $count;
}

由于

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,您需要使用$catid,否则查询无论如何都没有任何改进。

这可以像你在第一次更换

的情况下那样完成
$cat->category_id == $catid && $cat->category_lang == $dblang

通过

category_id = ".$catid." and category_lang = ".$dblang."

这会让我们将where语句更改为

category_parent = ".$catid." and category_order = 0 AND category_auto_id<>0

当然不使用foreach循环