• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql中无限极分类的代码实现

mysql 搞代码 4年前 (2022-01-09) 15次浏览 已收录 0个评论

本篇文章给大家带来的内容是关于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 ‘&nbsp;’}{/php}{$vo.name}</option>{/volist}</select>

效果:

新闻

中国新闻

北京新闻

美国新闻

本文来源gaodai$ma#com搞$$代**码网$ 华盛顿新闻

相关推荐:

thinkphp中无限级栏目的排序实现代码

TP5框架下如何用递归实现无限分级(代码示例)

以上就是mysql中无限极分类的代码实现的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql中无限极分类的代码实现

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址