此处将为大家介绍关于php-从SQL查询结果构建父/子数组菜单结构的详细内容,并且为您解答有关sql查询父级下所有子集的相关问题,此外,我们还将为您介绍关于Cakephpdb查询结果没有表名,只是My
此处将为大家介绍关于php-从SQL查询结果构建父/子数组菜单结构的详细内容,并且为您解答有关sql查询父级下所有子集的相关问题,此外,我们还将为您介绍关于Cakephp db查询结果没有表名,只是MySQL中的简单结果?、mybatis从SQL查询结果到领域模型实体、MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果、MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果_PHP教程的有用信息。
本文目录一览:- php-从SQL查询结果构建父/子数组菜单结构(sql查询父级下所有子集)
- Cakephp db查询结果没有表名,只是MySQL中的简单结果?
- mybatis从SQL查询结果到领域模型实体
- MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果
- MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果_PHP教程
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中的简单结果?
$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查询结果到领域模型实体
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查询结果
在一般的网站中,我们会通常看到,很多数据库中表的数据在浏览器都是出现在表格中的,一开始让自己感到很神奇,但是仔细想想也不算太复杂,既然可以dql和dml的一般返回,以表格的方式返回应该也不成问题,但是,有一点说明的是,在客户端设计脚本去实现问题是不对的,即便可以实现起来也是非常复杂,所以,只能在服务器的方面去考虑,想想问题解决的方式就有了,即在返回的时候打印表格标签和对应属性和属性值,虽然说这种方式看起来不太合理,但是这也是最为有效的方法。具体的代码如下:
<?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"); ?>
MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果_PHP教程
mysql数据库查询结果用表格输出php代码示例,mysql查询结果
在一般的网站中,我们会通常看到,很多数据库中表的数据在浏览器都是出现在表格中的,一开始让自己感到很神奇,但是仔细想想也不算太复杂,既然可以dql和dml的一般返回,以表格的方式返回应该也不成问题,但是,有一点说明的是,在客户端设计脚本去实现问题是不对的,即便可以实现起来也是非常复杂,所以,只能在服务器的方面去考虑,想想问题解决的方式就有了,即在返回的时候打印表格标签和对应属性和属性值,虽然说这种方式看起来不太合理,但是这也是最为有效的方法。具体的代码如下:
<?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"); ?>
今天关于php-从SQL查询结果构建父/子数组菜单结构和sql查询父级下所有子集的讲解已经结束,谢谢您的阅读,如果想了解更多关于Cakephp db查询结果没有表名,只是MySQL中的简单结果?、mybatis从SQL查询结果到领域模型实体、MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果、MySql数据库查询结果用表格输出PHP代码示例,mysql查询结果_PHP教程的相关知识,请在本站搜索。
本文标签: