>백엔드 개발 >PHP 튜토리얼 >这个无限分类怎么做啊

这个无限分类怎么做啊

WBOY
WBOY원래의
2016-06-06 20:11:581266검색

这个无限分类怎么做啊

这个无限分类怎么做啊
机械类 找机械工程这样的。。能实现吗?大神们帮讲一下吧,说详细点谢谢了

回复内容:

这个无限分类怎么做啊

这个无限分类怎么做啊
机械类 找机械工程这样的。。能实现吗?大神们帮讲一下吧,说详细点谢谢了

<code>先得到 0802;而后
mysql: select * from xxx where m_code  like '0802__';
如果是数据全部取出来在分类的话, 就是 id==pid 的地方相应的改为正则匹配  (不好递归啊。。不能从0开始)</code>

首先你的这个表结构并不能够实现无线分类
解决办法:

<code>再加一个字段,标识出当前记录到底是属于谁的子分类
如:
mid      m_name   m_code  fid
1        机械类     xxx     0
2        机械工程   xxxx    1
3        挖掘机     xxxx    2
4        机械工程1  xxx     1</code>

fid就是标识着 父分类是谁。

实现方式是:
select * from xxx where mid='$fid'
用递归去找父分类, 直到找不到父分类为止

你这样的朝设计,需要将数据取出来以后对 code 进行字符串处理才能知道这样数据的分类。相比之下增加一个 parentcode 之类的字段标识上级分类会更方便处理

本来写了不少,不过又都删掉了。你这个东西有bug,所以建议你采用传统设计吧,就是id, parent_id, path那种方式。
通常的path采用逗号分隔的形式,如 1, 13, 305,而你的思路貌似想用0作为分隔符,那么如果一个分类有超过9个子分类的时候,你怎么确定那个0是不是分隔符呢?除非你用9进制,但是这太麻烦了,还不如老老实实去做。或者你把m_code改成8-42-293这种形式,可是这又和path方式没什么区别。

另外,有很多时候我们不是不能减少数据表的字段,额外的字段往往是为了提升、优化搜索才定义的。比如你这种设计,我只想查出工学的子分类,而不是子分类树,查询怎么写?

如果不许用电,怎么保持冰箱工作?这和你的问题如出一辙,不是绝对不行,但是不符合通常的逻辑,或者代价高昂。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.