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

57次阅读
没有评论

共计 1663 个字符,预计需要花费 5 分钟才能阅读完成。

自动写代码机器人,免费开通

丸趣 TV 小编给大家分享一下 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 几次 nbsp;

select name=”aa”{volist name=”list”id=”vo”}
 option vlaue=”{$vo.id}”{php}
for($i=0;$i $vo[‘count’]*2;$i++){
echo‘nbsp;’{/php}
{$vo.name}
 /option 
{/volist}
 /select

效果:

新闻

中国新闻

北京新闻

美国新闻

华盛顿新闻

以上是 mysql 中无限极分类的实现方法的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计1663字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)