2016-02-29 14:29:59 4677次浏览 2条回答 1 悬赏 20 金钱

输入图片说明
我希望的查询结果应该是这样的:
输入图片说明
请教各位有什么好的思路或方法嘛?

补充一下:
我暂时是这样做的:

$query	=	$model::find();
$data	=	$query->where(['menu_parent'=>0])->orderBy('menu_position asc')->asArray()->all();
$i	=	0;
foreach($data as $k=>$v){
	if($v['menu_parent']!=0){
		continue;
	}
	$level	=	$query->where(['menu_parent'=>$v['menu_position']])->asArray()->all();
	array_splice($data,$k+1+$i,0,$level);
	$i=count($level);
}
foreach($data as $k=>$v){
	echo $k.'的值:'.$v['menu_name']."<br>";
}

有没有什么更好的方法?

最佳答案

  • javalzbin 发布于 2016-02-29 14:46 举报

    你把menu_value定义为varchar,然后order by menu_value 就是按照你这个方式来排序了,1在2前面,所以,1-1 的记录也会在2前面

    3 条回复
    回复于 2016-02-29 15:34 回复

    menu_value本身便是varchar,但是它的值并不是像上图这样,这只是我为了方便查看才设置成这样的,本身menu_value的值并不确定

    回复于 2016-03-01 09:54 回复

    从数据上来看,你这个应该像是菜单,N级菜单,哪我不明白为什么你的menu_value不确定,你可以完全设计一个字段,实现上图中的效果,只作为查询使用

    回复于 2016-03-03 15:14 回复

    是菜单,menu_value是菜单的名称,并不是专门用来排序的。我明白你的意思了,是专门拿出一个字段用来排序的,类似于我这个menu_value表现形式的字段

  • 回答于 2016-03-01 16:57 举报

    做菜单、或者分类树,可以用递归,给个父级ID做标识。
    循环查询子级

    1 条回复
    回复于 2016-03-03 15:15 回复

    递归是个解决方案,只不过,我是尽量不想用递归的

您需要登录后才可以回答。登录 | 立即注册
eaglexpf
见习主管

eaglexpf

注册时间:2015-11-23
最后登录:2016-05-23
在线时长:11小时20分
  • 粉丝1
  • 金钱145
  • 威望10
  • 积分355

热门问题