GVKun编程网logo

php-从SQL查询结果构建父/子数组菜单结构(sql查询父级下所有子集)

3

此处将为大家介绍关于php-从SQL查询结果构建父/子数组菜单结构的详细内容,并且为您解答有关sql查询父级下所有子集的相关问题,此外,我们还将为您介绍关于Cakephpdb查询结果没有表名,只是My

此处将为大家介绍关于php-从SQL查询结果构建父/子数组菜单结构的详细内容,并且为您解答有关sql查询父级下所有子集的相关问题,此外,我们还将为您介绍关于Cakephp db查询结果没有表名,只是MySQL中的简单结果?、mybatis从SQL查询结果到领域模型实体、MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果、MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果_PHP教程的有用信息。

本文目录一览:

php-从SQL查询结果构建父/子数组菜单结构(sql查询父级下所有子集)

php-从SQL查询结果构建父/子数组菜单结构(sql查询父级下所有子集)

我需要使用MySQL DB查询动态地构建一个复杂的菜单结构.该查询允许定义用户有权使用和查看的菜单项. Menu结构以经典的父/子关系存储到结果集中,其中每个元素都有自己的ID,并依赖于其父ID.父代ID = 0表示该元素上方没有父代(它是根):

MNU_ID    MNU_FUNC    MNU_PARENT    MNU_ICON    MNU_TITLE_IT    MNU_TITLE_EN
----------------------------------------------------------------------------
  1       FLTMGR      0             home        STATO FLottA    FLEET STATUS
  2       PSTN        0             map-marker  POSIZIONI       POSITIONS
  3       RTS         0             road        PERCORSI        ROUTES
  4       CHRTS       0             line-charts DIAGRAMMI       CHARTS
  ...
  13      MNLS        0             book        MANUALI         MANUALS
  14      RGLTNS      0             bank        norMATIVE       REGULATIONS
  16      SPD         4             tachometer  VELociTA'       SPEED
  17      ALT         4             area-chart  ALTITUDINE      ALTITUDE
  18      DST         4             exchange    disTANZA        disTANCE
  ...
  32      INSTL       13            book        INSTALLAZIONE   SETUP
  33      BASE        32            Wrench      BASE            BASE
  34      FLPR        32            Wrench      SONDA CARB.     FUAL PROBE

因此,您可以看到元素33和34在元素32下,而元素32在元素13下,最后元素13没有父元素,因为它是根元素(它的MNU_PARENT为0).
好了,我已经开发了我的代码以返回以下内容:

Array(
[FLTMGR] => Array(
    [icon] => fa fa-home
    [title] => STATO FLottA
    ),
[PSTN] => Array(
    [icon] => fa fa-map-marker
    [title] => POSIZIONI
    ),
[RTS] => Array(
    [icon] => fa fa-road
    [title] => PERCORSI
    ),
[CHRTS] => Array(
    [icon] => fa fa-line-charts
    [title] => DIAGRAMMI
    [sub] => Array(
            [SPD] => Array(
                [icon] => fa fa-tachometer
                [title] => VELociTÁ
                ),
            [ALT] => Array(
                [icon] => fa fa-area-chart
                [title] => ALTITUDINE
                ),
            [DST] => Array(
                [icon] => fa fa-exchange
                [title] => disTANZA
                ),
            [GSLN] => Array(
                [icon] => fa fa-tint blink
                [title] => CARBURANTE
                )
            )
        ),
...
[MNLS] => Array(
    [icon] => fa fa-book
    [title] => MANUALI
    [sub] => Array(
        [INSTL] => Array(
            [MNU_ID] => 32
            [MNU_FUNC] => INSTL
            [MNU_PARENT] => 13
            [icon] => fa fa-book
            [title] => INSTALLAZIONE
            [sub] => Array(
                [0] => Array(
                    [MNU_ID] => 33
                    [MNU_FUNC] => BASE
                    [MNU_PARENT] => 32
                    [icon] => fa fa-Wrench
                    [title] => BASE
                    ),
                [1] => Array(
                    [MNU_ID] => 34
                    [MNU_FUNC] => FLPR
                    [MNU_PARENT] => 32
                    [icon] => fa fa-Wrench
                    [title] => SONDA CARB.
                    )
                )
            )
        )
    ),
[RGLTNS] => Array( 
    [icon] => fa fa-bank
    [title] => norMATIVE
    )
)

但是,如您所见,我无法在fisrt级别上生成正确的结构.换句话说,如果您查看MNLS下的INSTL元素,则会出现以下错误:

>项目MNU_ID,MNU_FUNC,MNU_PARENT不应该存在(请参阅其他项目)
>’sub’下的项目在1中具有相同的错误.
>“ sub”下的项目应使用BASE,FLPR标识,而不是0和1

因此,预期结构应如下所示:

Array(
[FLTMGR] => Array(
    [icon] => fa fa-home
    [title] => STATO FLottA
    ),
[PSTN] => Array(
    [icon] => fa fa-map-marker
    [title] => POSIZIONI
[RTS] => Array(
    [icon] => fa fa-road
    [title] => PERCORSI
    ),
[CHRTS] => Array(
    [icon] => fa fa-line-charts
    [title] => DIAGRAMMI
    [sub] => Array(
            [SPD] => Array(
                [icon] => fa fa-tachometer
                [title] => VELociTÁ
                ),
            [ALT] => Array(
                [icon] => fa fa-area-chart
                [title] => ALTITUDINE
                ),
            [DST] => Array(
                [icon] => fa fa-exchange
                [title] => disTANZA
                ),
            [GSLN] => Array(
                [icon] => fa fa-tint blink
                [title] => CARBURANTE
                )
            )
        ),
...
[MNLS] => Array(
    [icon] => fa fa-book
    [title] => MANUALI
    [sub] => Array(
        [INSTL] => Array(
            [icon] => fa fa-book
            [title] => INSTALLAZIONE
            [sub] => Array(
                [BASE] => Array(
                    [icon] => fa fa-Wrench
                    [title] => BASE
                    ),
                [FLPR] => Array( 
                    [icon] => fa fa-Wrench
                    [title] => SONDA CARB.
                    )
                )
            )
        )
    ),
[RGLTNS] => Array(
    [icon] => fa fa-bank
    [title] => norMATIVE
    )
)

现在的代码:

// $MenuDB contains the Menu structure returned by the DB

// Build the basic structure
$new = array();
foreach ($MenuDB as $a){
    $new[$a['MNU_PARENT']][] = $a;
    }

// Calls the recursive function CreateTree 
$tree = createTree($new, $new[0]);  

// Make final correction (remove unwanted items and replace index with keys)
$b=replaceKeys($tree);

print_r($b);
exit();

function replaceKeys(array $input) {    
    foreach($input as $key => &$val){                   // Scan the input array, each element will go in $val, the key will be $key
        $input[$val['MNU_FUNC']]=$input[$key];          // Replace index with key, the key is the value of the field MNU_FUNC
        if(is_numeric($key)) unset($input[$key]);       // Remove the item with numeric key (index) and leave the item with non-numeric index (key)
        unset($val['MNU_ID']);                          // Remove ID
        unset($val['MNU_PARENT']);                      // Remove Parent
        unset($val['MNU_FUNC']);                        // Remove Function
        if(isset($val['sub'])) {                        // avoid to work with undefined items
            if (is_array($val['sub'])) {                // check if there are childs inside the 'sub' item
                $val['sub'] = replaceKeys($val['sub']); // if we have childs, do it again recursively
                unset($val['url']);                     // remove url element if we have childs
                unset($val['url_target']);              // remove url_target element if we have childs
                }
            }
        }
    return $input;
    }

function createTree(&$list, $parent){
    $tree = array();
    foreach ($parent as $k=>$l){
        if(isset($list[$l['MNU_ID']])){
            $l['sub'] = createTree($list, $list[$l['MNU_ID']]);
            }
        $tree[] = $l;
        } 
    return $tree;
    }

尽管做出了我的努力,我仍然无法弄清错误所在.
我的工作流程有什么改变吗?

解决方法:

您只能使用一个递归函数:

function makeTree($array, $parent) {
    $return = [];
    foreach ($array as $key => $value) {
        if ($value['MNU_PARENT'] == $parent) {
            $return[$value['MNU_FUNC']] = [
                'icon' => 'fa fa-' . $value['MNU_ICON'],
                'title' => $value['MNU_TITLE_IT'],
            ];
            $subs = false;
            foreach ($array as $search) {
                if ($search['MNU_PARENT'] == $value['MNU_ID']) {
                    $subs = true;
                }
            }
            if ($subs === true) {
                $return[$value['MNU_FUNC']]['subs'] = makeTree($array, $value['MNU_ID']);
            }
        }
    }
    return $return;
}

$new = makeTree($arr, 0);

Cakephp db查询结果没有表名,只是MySQL中的简单结果?

Cakephp db查询结果没有表名,只是MySQL中的简单结果?

我正在使用cakePHP,我有一个模特

$db = $this->getDataSource();
$result = $db->fetchAll(
        'SELECT table1.id,table1.title,table1.buy_url,table2.image_file as image,table3.category_id as maincategory,(table4.user_id = "71") AS isfavorite
        FROM table1
        INNER JOIN ...
        LEFT JOIN ...
        LEFT JOIN ...
        where ...);

    return $result;

我得到这样的结果:

{
  "table1": {
    "id": "132","title": "Awesome",},"table2": {
    "image": "image_25398457.jpg"
  },"table3": {
    "maincategory": "3"
  },"table4": {
    "isfavorite": "1"
  }
}

但是我不想显示表格的名称,我更愿意通过以下方式获得结果:

{
    "id": "132","image": "image_25398457.jpg"
    "maincategory": "3"
    "isfavorite": "1"
}

我怎么能得到这个?

谢谢 !

解决方法

从我所看到的,结果按表名分组.

最简单的选择是:

$merged = call_user_func_array('array_merge',$result);

另一种选择是:

$db = $this->getDataSource();
$result = $db->fetchAll(
    'SELECT * FROM (
        SELECT table1.id,(table4.user_id = "71") AS isfavorite
        FROM table1
        INNER JOIN ...
        LEFT JOIN ...
        LEFT JOIN ...
        where ... '
    ) as final_table
);

return $result;

这就是为什么你只有这样的东西:

{
   "final_table" : {
       "id": "132","image": "image_25398457.jpg"
       "maincategory": "3"
       "isfavorite": "1"
   }
}

mybatis从SQL查询结果到领域模型实体

mybatis从SQL查询结果到领域模型实体

1. 通过JDBC查询得到ResultSet对象
2. 遍历ResultSet对象并将每行数据暂存到HashMap实例中,以结果集的字段名或字段别名为键,以字段值为值
3. 根据ResultMap标签的type属性通过反射实例化领域模型
4. 根据ResultMap标签的type属性和id、result等标签信息将HashMap中的键值对,填充到领域模型实例中并返回

ResultMap标签

属性说明:

id属性 ,resultMap标签的标识。
type属性 ,返回值的全限定类名,或类型别名。
autoMapping属性 ,值范围true(默认值)|false, 设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为false后,则需要在`resultMap`内明确注明映射关系才会调用对应的setter方法。

MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果

MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果

mysql数据库查询结果用表格输出php代码示例,mysql查询结果

在一般的网站中,我们会通常看到,很多数据库中表的数据在浏览器都是出现在表格中的,一开始让自己感到很神奇,但是仔细想想也不算太复杂,既然可以dql和dml的一般返回,以表格的方式返回应该也不成问题,但是,有一点说明的是,在客户端设计脚本去实现问题是不对的,即便可以实现起来也是非常复杂,所以,只能在服务器的方面去考虑,想想问题解决的方式就有了,即在返回的时候打印表格标签和对应属性和属性值,虽然说这种方式看起来不太合理,但是这也是最为有效的方法。具体的代码如下:

<&#63;php
//在表格中显示表的数据,常用方式
	function ShowTable($table_name){
		$conn=mysql_connect("localhost","root","toor");
		if(!$conn){
			echo "连接失败";
		}
		mysql_select_db("test",$conn);
		mysql_query("set names utf8");
		$sql="select * from $table_name";
		$res=mysql_query($sql,$conn);
		$rows=mysql_affected_rows($conn);//获取行数
		$colums=mysql_num_fields($res);//获取列数
		echo "test数据库的"."$table_name"."表的所有用户数据如下:<br/>";
		echo "共计".$rows."行 ".$colums."列<br/>";
		
		echo "<tableborder-color: #efefef;'' border=''1px'' cellpadding=''5px'' cellspacing=''0px''><tr>";
		for($i=0; $i < $colums; $i++){
			$field_name=mysql_field_name($res,$i);
			echo "<th>$field_name</th>";
		}
		echo "</tr>";
		while($row=mysql_fetch_row($res)){
			echo "<tr>";
			for($i=0; $i<$colums; $i++){
				echo "<td>$row[$i]</td>";
			}
			echo "</tr>";
		}
		echo "</table>";
	}
	ShowTable("test1");
&#63;>
登录后复制

MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果_PHP教程

MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果_PHP教程

mysql数据库查询结果用表格输出php代码示例,mysql查询结果

在一般的网站中,我们会通常看到,很多数据库中表的数据在浏览器都是出现在表格中的,一开始让自己感到很神奇,但是仔细想想也不算太复杂,既然可以dql和dml的一般返回,以表格的方式返回应该也不成问题,但是,有一点说明的是,在客户端设计脚本去实现问题是不对的,即便可以实现起来也是非常复杂,所以,只能在服务器的方面去考虑,想想问题解决的方式就有了,即在返回的时候打印表格标签和对应属性和属性值,虽然说这种方式看起来不太合理,但是这也是最为有效的方法。具体的代码如下:

<&#63;php
//在表格中显示表的数据,常用方式
	function ShowTable($table_name){
		$conn=mysql_connect("localhost","root","toor");
		if(!$conn){
			echo "连接失败";
		}
		mysql_select_db("test",$conn);
		mysql_query("set names utf8");
		$sql="select * from $table_name";
		$res=mysql_query($sql,$conn);
		$rows=mysql_affected_rows($conn);//获取行数
		$colums=mysql_num_fields($res);//获取列数
		echo "test数据库的"."$table_name"."表的所有用户数据如下:<br/>";
		echo "共计".$rows."行 ".$colums."列<br/>";
		
		echo "<tableborder-color: #efefef;'' border=''1px'' cellpadding=''5px'' cellspacing=''0px''><tr>";
		for($i=0; $i < $colums; $i++){
			$field_name=mysql_field_name($res,$i);
			echo "<th>$field_name</th>";
		}
		echo "</tr>";
		while($row=mysql_fetch_row($res)){
			echo "<tr>";
			for($i=0; $i<$colums; $i++){
				echo "<td>$row[$i]</td>";
			}
			echo "</tr>";
		}
		echo "</table>";
	}
	ShowTable("test1");
&#63;>
登录后复制

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/970990.htmlTechArticleMySql数据库查询结果用表格输出PHP代码示例,mysql查询结果 在一般的网站中,我们会通常看到,很多数据库中表的数据在浏览器都是出现在...

今天关于php-从SQL查询结果构建父/子数组菜单结构sql查询父级下所有子集的讲解已经结束,谢谢您的阅读,如果想了解更多关于Cakephp db查询结果没有表名,只是MySQL中的简单结果?、mybatis从SQL查询结果到领域模型实体、MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果、MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果_PHP教程的相关知识,请在本站搜索。

本文标签: