84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
机械类 找机械工程这样的。。能实现吗?大神们帮讲一下吧,说详细点谢谢了
业精于勤,荒于嬉;行成于思,毁于随。
先得到 0802;而后 mysql: select * from xxx where m_code like '0802__'; 如果是数据全部取出来在分类的话, 就是 id==pid 的地方相应的改为正则匹配 (不好递归啊。。不能从0开始)
首先你的这个表结构并不能够实现无线分类解决办法:
再加一个字段,标识出当前记录到底是属于谁的子分类 如: mid m_name m_code fid 1 机械类 xxx 0 2 机械工程 xxxx 1 3 挖掘机 xxxx 2 4 机械工程1 xxx 1
fid就是标识着 父分类是谁。
实现方式是:select * from xxx where mid='$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方式没什么区别。
另外,有很多时候我们不是不能减少数据表的字段,额外的字段往往是为了提升、优化搜索才定义的。比如你这种设计,我只想查出工学的子分类,而不是子分类树,查询怎么写?
如果不许用电,怎么保持冰箱工作?这和你的问题如出一辙,不是绝对不行,但是不符合通常的逻辑,或者代价高昂。
首先你的这个表结构并不能够实现无线分类
解决办法:
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方式没什么区别。
另外,有很多时候我们不是不能减少数据表的字段,额外的字段往往是为了提升、优化搜索才定义的。比如你这种设计,我只想查出工学的子分类,而不是子分类树,查询怎么写?
如果不许用电,怎么保持冰箱工作?这和你的问题如出一辙,不是绝对不行,但是不符合通常的逻辑,或者代价高昂。