Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP从MySQL中选择类别id和所有子类别id_Php_Mysql_Categories_Recursive Query - Fatal编程技术网

使用PHP从MySQL中选择类别id和所有子类别id

使用PHP从MySQL中选择类别id和所有子类别id,php,mysql,categories,recursive-query,Php,Mysql,Categories,Recursive Query,我的数据库结构和数据如下: id | sub | title ------+---------+---------- 1 | 0 | Cat 1 2 | 0 | Cat 2 3 | 1 | Cat1-1 4 | 2 | Cat2-1 5 | 2 | Cat2-2 6 | 5 | Cat2-2-1 现在,当我有ID 4时,我想选择所有子类别ID,所以我应该选择

我的数据库结构和数据如下:

id    |   sub   |   title
------+---------+----------
1     |   0     | Cat 1
2     |   0     | Cat 2
3     |   1     | Cat1-1
4     |   2     | Cat2-1
5     |   2     | Cat2-2
6     |   5     | Cat2-2-1
现在,当我有ID 4时,我想选择所有子类别ID,所以我应该选择4,5,6。
我知道我应该使用递归函数,但我不知道该怎么做:-(

说你是否在URL中传递id

这样你就可以拿到你想要的身份证了

$category_id = $_GET['id']; //Say 4 here, 
//Also don''t forget to validate that ID and sannitize it before you use it in your query

so now you can fetch the sub categories like

$fetch_sub_cat = mysqli_query($connection, "SELECT * FROM table_name WHERE id = $category_id");

while($throw_results = mysqli_fetch_array($fetch_sub_cat)) {
   echo $throw_results['id'];
}

如果要循环类别ID,而不需要嵌套此循环以及查询以获取子类别,请提供一些信息,您可以更改列名称并使用

$data=array(
array('Menu_ID'=>1, 'Menu_Name'=>'Catalog', 'Menu_Link'=>'#', 'Menu_ParentID'=>0),
array('Menu_ID'=>2, 'Menu_Name'=>'Reports', 'Menu_Link'=>'#', 'Menu_ParentID'=>0),
array('Menu_ID'=>3, 'Menu_Name'=>'Products','Menu_Link'=> '#','Menu_ParentID'=> 1),
array('Menu_ID'=>4, 'Menu_Name'=>'Sales','Menu_Link'=> '#', 'Menu_ParentID'=>2),
array('Menu_ID'=>5, 'Menu_Name'=>'Customers','Menu_Link'=> '#', 'Menu_ParentID'=>2),
array('Menu_ID'=>6, 'Menu_Name'=>'Tvs','Menu_Link'=> '#','Menu_ParentID'=> 3));

print_r(loop_menu($data));

// Menu_ID Menu_Name Menu_Link Menu_ParentID
function loop_menu($rows,$parent = 0){
 $arr=array();
 $i=0;
  foreach ($rows as $row)
  { 
        if (array_key_exists('Menu_ParentID',$row) && $row['Menu_ParentID'] == $parent){

                if(array_key_exists($i,$arr)){
                    $arr[$i]=array();
                }
                $arr[$i]['data']=$row;
                $arr[$i]['child']= loop_menu($rows,$row['Menu_ID']);
                $i++;
        }
  }
    return $arr;
}
然后

然后将类似数组的代码编写到ul

另一种数组样式

$arr[$i]['data'] = $row;
$arr[$i]['child']= loop_menu($rows,$row['Menu_ID']);
改为

$row['child'] = loop_menu($rows,$row['Menu_ID']);
$arr[$i] = $row;

@DipeshParmar谢谢,但这对甲烷不起作用,但递归函数对我很重要,我想知道如何使用递归函数来实现这一点problem@MajAfy为什么需要递归函数?谢谢,正如我说的,我需要从数据库而不是数组中获取数据
$row['child'] = loop_menu($rows,$row['Menu_ID']);
$arr[$i] = $row;