不知道你数据量大不大
小企业站的话,得到父分类ID后,查到所有子分类ID,然后合并到一起:2,5,6,7,8这种
再到产品表sql语句用in关键字查出来,怎么用,搜一下吧...
不清楚in能不能用到索引?如果数据量比较大,就用冗余换效率
给分类表加一个floor字段,父分类就写0,1级子分类就写1,2级子分类写2
假设你有3层分类,那么在产品表加3个字段,cate,cate1,cate2
产品属于哪个子分类,就把从父到2级子 3个字段都填满
筛选时根据传入的cateid,先查出这个分类的floor,然后查出他的所有上级分类id
剩下就是把所有得到的id作为条件筛选了
这里有个关键,要建一个BTREE索引,以cate到cateN的顺序都包括进来
同数据量方法2要快很多,但他的缺点是子分类移动时还要改产品表
小企业站的话,得到父分类ID后,查到所有子分类ID,然后合并到一起:2,5,6,7,8这种
再到产品表sql语句用in关键字查出来,怎么用,搜一下吧...
不清楚in能不能用到索引?如果数据量比较大,就用冗余换效率
给分类表加一个floor字段,父分类就写0,1级子分类就写1,2级子分类写2
假设你有3层分类,那么在产品表加3个字段,cate,cate1,cate2
产品属于哪个子分类,就把从父到2级子 3个字段都填满
筛选时根据传入的cateid,先查出这个分类的floor,然后查出他的所有上级分类id
剩下就是把所有得到的id作为条件筛选了
这里有个关键,要建一个BTREE索引,以cate到cateN的顺序都包括进来
同数据量方法2要快很多,但他的缺点是子分类移动时还要改产品表
比如说点击的分类,id号为18,就可以用cate_path like "%18-%" or cate_path like "%-18%"来筛选。
用 , 或者 - 应该都可以吧
产品的cateid字段保存这样的格式:1,5,8,21 是从1级分类到N级分类
如果想查cateid=8的所有产品,那先找出5和1这2个上级分类,生成字符串1,5,8
然后查询语句用 cateid like '$cateid%',当然这个字段单独加个索引
你们讨论的是在分类上加path,然后查询产品的sql语句用in?
无限级分类用in那效率会不会...in一大堆ID
还好in可以用到索引,不知道mysql有没有为in排序,否则索引树要从头到底遍历一次,然后复杂度还要乘以id的个数我在4楼和10楼说的都是加速查询的方案
只是实现的话怎么都有办法
获得cateid后从内存缓存中(编辑分类时一次性生成)用php的变量hash读取他的分类路径,这一步几乎不耗时间
然后直接用路径字符串借助索引树一次性定位到全部数据集,速度很快很抱歉天气热有点浮躁,如果有错误请指正