PHP产品类别选择下拉列表,允许用户将类别定义为主类别或子类别

时间:2014-02-19 08:07:44

标签: php mysql recursive-query

我有一个包含选择下拉类别列表的表单。当用户添加新类别时,他应该从parent =“0”的所有主要类别或他们的子类别中进行选择。 我的数据库结构是:

id || bg_category || parent  ==> and for example I have:    
1  || Jewellery   ||  0    
2  || Rings       ||  1    
3  || Ear rings   ||  2    
4  || Bracelets   ||  0

条件是父类别不能作为子类别添加到其子类别或自身。 到目前为止,我有这个功能:

public function getMasterCategories($cid = 0) {
    echo '<option value="0" selected="true">No category</option>';
    if (empty($cc))
        $cc = 9999999999;
    $que = 'select id, bg_category,parent from products_categories group by id order by bg_category';
    $res = mysql_query($que) or die('Mysql Error:' . mysql_error() . '<br /> Query:' . $que);
    $num_rows = mysql_num_rows($res);
    for ($i = 0; $i < $num_rows; $i++) {
        $rw = mysql_fetch_row($res);
        if ($c == $rw[0])
            echo '<option value="', $rw[0], '" selected="true">', $rw[1], '</option>';
        else
            echo '<option value="', $rw[0], '">', $rw[1], '</option>';
    }
}

现在,此函数返回所有类别并显示可用性,以使子类别成为其母类别的父类别。

工作职能:

function getMasterCategories($c=0,$cc=0){
echo '<option value="0" selected="true">Няма</option>';
if(empty($cc)) $cc=9999999999;
$que='select id, bg_category,parent from products_categories where id="'.$cc.'"';
$res=mysql_query($que) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$que);
$num_rows=mysql_num_rows($res);
$rw=mysql_fetch_row($res);

    if($rw[0]>0){
    $querys='select id,bg_category,parent from products_categories where parent="'.$cc.'" order by bg_category';
    $results=mysql_query($querys) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$querys);
    $num_rs=mysql_num_rows($results);
    if($num_rs=="0"){
    $query='select id,bg_category,parent from products_categories where id!="'.$cc.'" order by bg_category';
    $result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);
    $num_r=mysql_num_rows($result);

    for($i=0;$i<$num_r;$i++){
    $row=mysql_fetch_row($result);
    $q='select id,bg_category,parent from products_categories where parent="'.$cc.'" and id="'.$row[0].'" order by bg_category';
    $r=mysql_query($q) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$q);
    $ro=mysql_fetch_row($r);
    if(empty($ro[0])){
        if($c==$row[0]) echo '<option value="',$row[0],'" selected="true">',$row[1],'</option>';
        else echo '<option value="',$row[0],'">',$row[1],'</option>';
        }
    }
    }

}   

}

2 个答案:

答案 0 :(得分:0)

您可以添加另一个用于将父类别添加到其子类别的enrty。

id || bg_category || parent  ==> and for example I have:    
1  || Jewellery   ||  0    
2  || Rings       ||  1    
3  || Ear rings   ||  2    
4  || Bracelets   ||  0
5  || Jewellery   ||  2

在上述情况下,我尝试在Jewellery类别下添加Rings类别。但是,新的Jewellery类别具有不同的ID

如果您提供了insert语句,我也可以提供有关该查询的帮助

答案 1 :(得分:0)

工作职能:

function getMasterCategories($c=0,$cc=0){
echo '<option value="0" selected="true">Няма</option>';
if(empty($cc)) $cc=9999999999;
$que='select id, bg_category,parent from products_categories where id="'.$cc.'"';
$res=mysql_query($que) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$que);
$num_rows=mysql_num_rows($res);
$rw=mysql_fetch_row($res);

    if($rw[0]>0){
    $querys='select id,bg_category,parent from products_categories where parent="'.$cc.'" order by bg_category';
    $results=mysql_query($querys) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$querys);
    $num_rs=mysql_num_rows($results);
    if($num_rs=="0"){
    $query='select id,bg_category,parent from products_categories where id!="'.$cc.'" order by bg_category';
    $result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);
    $num_r=mysql_num_rows($result);

    for($i=0;$i<$num_r;$i++){
    $row=mysql_fetch_row($result);
    $q='select id,bg_category,parent from products_categories where parent="'.$cc.'" and id="'.$row[0].'" order by bg_category';
    $r=mysql_query($q) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$q);
    $ro=mysql_fetch_row($r);
    if(empty($ro[0])){
        if($c==$row[0]) echo '<option value="',$row[0],'" selected="true">',$row[1],'</option>';
        else echo '<option value="',$row[0],'">',$row[1],'</option>';
        }
    }
    }

}   

}