加入收藏 | 设为首页 | 会员中心 | 我要投稿 大连站长网 (https://www.0411zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql中无限极分类的实现方法

发布时间:2022-02-24 12:12:41 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下mysql中无限极分类的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 我也是从别的地方找来的,分析后发现挺不错的,特来分享。 无法发图只能
       小编给大家分享一下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(一组数据),把统计的数组个数放到这个键里。
 mysql中无限极分类的实现方法
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中无限极分类的实现方法的所有内容,感谢各位的阅读!

(编辑:大连站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!