有个工作项目,要求的产品分类跟阿里巴巴的方式相似,但观察了下它的流程有些不明白来请教下高人。像它这种方式:
供应首页 > 卫浴洗漱日化用品 > 美发造型用品 > 洗发水
http://list.china.alibaba.com/buyer/offerlist/1041075.html比如一瓶“海飞丝洗发水”,在点以上的三个类别它都会出现在列表里,这样是用什么方式做到的呢?依我的肤浅理解,它的类别应是多级分类,可就是想不通当在发布“海飞丝洗发水”时,它的所属类别ID是什么呢,难道是在同一字段里存储多个类ID吗?比如(1,3,5...),如果是的话它又如何查询结果呢?项目是PHP+MYSQL环境,请各位有经验的朋友指点一下,谢谢!
另谁有效率较高的N级分类例子参考一下吗?我现在使用的是递归方式,感觉效率很不好。
供应首页 > 卫浴洗漱日化用品 > 美发造型用品 > 洗发水
http://list.china.alibaba.com/buyer/offerlist/1041075.html比如一瓶“海飞丝洗发水”,在点以上的三个类别它都会出现在列表里,这样是用什么方式做到的呢?依我的肤浅理解,它的类别应是多级分类,可就是想不通当在发布“海飞丝洗发水”时,它的所属类别ID是什么呢,难道是在同一字段里存储多个类ID吗?比如(1,3,5...),如果是的话它又如何查询结果呢?项目是PHP+MYSQL环境,请各位有经验的朋友指点一下,谢谢!
另谁有效率较高的N级分类例子参考一下吗?我现在使用的是递归方式,感觉效率很不好。
类别表: class
sid pid name
1 0 卫浴洗漱日化用品
2 1 美发造型用品
3 2 洗发水产品表:pro
id sid pro_name
1 3 海飞丝洗发水
这样设计类别表可以实现无限级别,可扩展,查询时需要循环出子类别,然后把相关产品信息显示.
数据两大可考虑用缓存,介绍服务器开销
当来路 sid=1时,查pro表就得不到产品了,因为它只存储到最底层的sid,所以我才在想用不用把1、2、3的类ID都存储进去。
比如:来路 sid=1那么你就返回1,2,3
在查询的时候in(1,2,3) 就可以了至于4楼的关系表是没有必要的,因为产品表里本生就是个关系表.你的设计也不符合楼主的需要
明白,这也是一种解决方法。只是担心in()的效率不行,当数据多的时候恐难胜任。
我当前在试着把关系类ID都存入产品表字段,然后用find_in_set(1,sid),虽然可行,但效率也明显不高。
正确做法是像4楼所说的...加映射表但映射表中的 id 字段不需要product
PRIMARY(product_id), product_name ...category
PRIMARY(category_id), category_name ...product_category_relation
PRIMARY(product_id, category_id)
海飞丝洗发水 =12category_id
卫浴洗漱日化用品 =1
美发造型用品 =3
洗发水 =5那我该在product_category_relation 表中存储什么呢?在前端查询时用什么方法呢?
结构比如
ID value PID
0 中国 0
1 北京 0
2 山东 0
3 河南 0
4 山西 0
5 昌平 1
6 海淀 1
7 济南 2
8 青岛 2
9 日照 2
10 郑州 3
11 安阳 3
12 洛阳 3
13 晋城 4
14 太原 4
discuz有无限分类? 别害人家.