小编给大家分享一下mysql中无限极分类的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
我也是从别的地方找来的,分析后发现挺不错的,特来分享。
无法发图只能简单处理:
id name pid path
1 新闻 0 0
2 中国新闻 1 0-1
3 美国新闻 1 0-1
4 北京新闻 2 0-1-2
5 指甲哥新闻 3 0-1-3
一条语句搞定:
SELECT id,name,pid,path,concat(path,’-‘,id) AS newpath FROM cates ORDER BY newpath
查询后的结果:
id name pid path newpath
1 新闻 0 0 0-1
2 中国新闻 1 0-1 0-1-2
4 北京新闻 2 0-1-2 0-1-2-4
3 美国新闻 1 0-1 0-1-3
5 指甲哥新闻 3 0-1-3 0-1-3-5
可以看出,结构已经很清晰了。非常巧妙的运用了mysql的排序功能,用 concat() 函数把当前路径与当前的id的连接起来(很想连接字符串),起个别名 newpath ,在排序 newpath,巧的是排序时先比较0,在比较1,在比较2,在比较3…,这样查询的结果是直接按曾级排序好的,接下来只需要在前台循环输出就可以了,“层级关系占位符”也好解决,newpath 的 0-1-2-4 这个就相当于无限极占位符,php输出时要用上面的语句查询出来,在后台处理 每一条数据的 newpath 字段值,先把值分割成数组,在统计这个数组,再在数组里添加一个键count(一组数据),把统计的数组个数放到这个键里。
thinkphp 5.0 为例:
$list = CateModel::fild(‘id,name,pid,path,concat(path,’-‘,id)’)->order(‘newpath asc’)->select(); // 上面模型查询方法只是大概意思,可以根据最上面的 mysql 语句,用 tp5 的方式拼出来。 foreach ($list as $k=>v){ $list[$k][‘count’] = count(explode(‘-‘,$v)) }
这个count就是层级分类的占位符,然后在模版里循环它,循环几次就echo 几次
<select name=”aa”> {volist name=”list” id=”vo”} <option vlaue=”{$vo.id}”> {php} for($i=0;$i<$vo[‘count’]*2;$i++){ echo ‘ ’ } {/php} {$vo.name} </option> {/volist} </select>
效果:
新闻
中国新闻
北京新闻
美国新闻
华盛顿新闻
以上是mysql中无限极分类的实现方法的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。