比如这个例子
http://www.360buy.com/products/737-752-753-0-0-0-0-0-0-0-1-1-1.html
电饭煲 - 商品筛选
关键在于对不同的商品类别,有不同筛选条件,筛选内容又是多样变化的,从数据库设计到程序实现,要怎么做种呢。
请提供经验和思路,谢谢。

解决方案 »

  1.   

    从它的页面html代码来看,应该实现了静态化的,从文件命名来分析:737-752-753-0-0-0-0-0-0-0-1-1-1.html 中:每一个中杠就是一个参数间隔,737表示:家用电器,752:厨房电器,753:电饭煲,等等。
    也就是说737-752-753-0-0-0-0-0-0-0-1-1-1.html表示的参数格式为:
    分别应该是:737                -752              -753             -0   -0  -0   -0  -0-0-0-1 -1      -1.html
    一级类(如:家用电器)-二级类(如:厨房电器)-三级类(如:电饭煲)-品牌-价格-类别-容量-0-0-0-1-排序方式    -1其中:容量与排序方式之间有3个0,和1个1,应该扩展用的,比如这个页面:http://www.360buy.com/products/737-794-888-0-0-0-0-0-0-0-1-1-1.html,燃气热水器的参数就多一些:气源,品牌,款式,排烟方式,价格,最大容积L。
    最后一个1,可能是表示是否在页面里显示推荐产品,你改成2试试,改3,4,5,都行,说明是此网站做了伪静态处理,应该用URL重写(UrlRewriter 是微软封装好了的一个URL重写组件)实现de.
      

  2.   


    对啊!用url重写把参数转化成querystring
      

  3.   

    象品牌筛选,分类筛选很简单实现,因为商品表里有直接的字段。但是象其它的变化属性,如按功能筛选的,比如这个电饭煲的里,按
        机械版
        电脑版
    筛选时,在DB里如何读取数据呢,因为商品表没有直接关于这个什么 机械版, 电脑版 字段,这要如何从DB读取数据进行筛选呢?
      

  4.   

    分类、品牌、商品这上面我已提起,就不说了说说属性。
    你的意思是如:电视有尺寸、分辨率属性,冷柜类可能有款式、容积的属性,也就是说不同的商品有不同的属性这样是吧?首先要分析一点,同分类的属性值应该是相同,如加湿器他的容积是1.0L以下、1.0L-2.0L、2.1L-3.0L3.1L这样的,也就是说凡是加湿器,管他哪个品牌的他都是这样的。但是冷柜则不同,他的容积是这样分的,100L以下、101-150L、151-200L、201-300L。
    我的建表方式:
    Brand_List(品牌列表)
    id    name
    1     海尔
    2     TCL
    3     星星Product_Category(商品分类)
    id    parent_id   name   BrandID_List(这里存放品牌的ID集合)
    1     0           家电    
    2     1           电视    1,2
    3     1           冷柜    1,3
    4     1           加湿器  1,2,3Category_attribute(商品分类属性)
    id    category_id  name       values
    1     2            尺寸         19英寸,20英寸,21英寸
    2     2            分辨率       1366*768,166*768
    3     3            冷柜容积     100L以下,01-150L
    4     4            加湿器容积   1.0L以下,1.0L-2.0LProducts_list (商品信息表)
    id    Category_Id(分类ID)    Brand_Id(品牌ID)   Name 
    1     2              1          海尔电视
    2     3              3          星星冷柜Products_attribute (商品属性)
    id    product_id(商品ID)   cat_att_id(商品分类属性的ID)  att_value(属性值)
    1     1            1                             19英寸
    2     1            2                             1366*768
    3     2            3                             100L以下后台录入商品时:1、选择商品分类;2、选择品牌(选择品牌的时候只读取与所选分类关联的品牌);3、属性的选择(将此分类关联的属性读出来,再读出每个属性的选项),除属性的数据写入到独立的表(products_attribute)外,其他信息均写入products_list表。
    前台筛选:选择分类后--》读出与此分类相关的品牌、读出与此分类相关的属性以及每个属性的选项值,执行查询时如果只根据分类和品牌去查,则直接的products_list表,如果要根据属性查,比如电视尺寸为19寸的,则此时需要去检索Products_attribute(商品属性)表,将检索出的结果与PRODUCTS——LIST关联就行。今天工作不算忙,就写了这么多,看似乎有些复杂,或许是我的思路不够好吧,如果有好的方式也希望别人能贴出来。你先看下对你是否有用,对了如果觉得还行,请记得给点辛苦分啊。
      

  5.   

    感谢luobingxka关注。
    但如果根据多属性查询呢?比如,电视,用户要查询 19寸,彩色,平板,how to do it?!
      

  6.   

    不知道是你没注意看,还是我上面表达得不太清楚,呵,我上面已经说了,分类与多个属性关联,前台检索分类时候便把此分类关联的多个属性读出来,如电视有尺寸和分辨率属性,则读出来应为
    尺寸:19英寸,20英寸,21英寸
    分辨率:1366*768,166*768 
    你可以看下Category_attribute(商品分类属性) 这个表。
      

  7.   

    简单思路:一个品牌表,一个分类表,一个产品表,产品表里面有两个外键,分别是指向品牌表和分类表,
    产品表里面还有很多其他字段如价格、容量、规格、产品名称、产品描述、产品图片等京东商城采用的是伪静态,搜索方式还是GET参数传递,很容易理解http://www.360buy.com/products/737-752-753-0-0-0-0-0-0-0-1-1-1.html这个红色部分就是参数,你仔细看,有个规律,就是13个参数,但我搜索美的的产品时候,变成:
    http://www.360buy.com/products/737-752-753-3212-0-0-0-0-0-0-1-1-1.html第四个参数代表品牌,你的要求“关键在于对不同的商品类别,有不同筛选条件”,只要多个搜索条件以GET参数传递给后台,用程序去构造相关的查询SQL语句,即可
      

  8.   

    这不就是复合的多条件查询吗?最简单的就是拼sql,代码简单.不过安全性差点.好点就是在存储过程中进行逻辑处理,不同的参数组合用不同的查询语句.
      

  9.   

    筛选时,在DB里如何读取数据呢,因为商品表没有直接关于这个什么 机械版, 电脑版 字段,这要如何从DB读取数据进行筛选呢?关键还是要看表设计的啦 不合理的表设计做起来那就非常复杂 或者根本做不到
    多属性只是对关联查询到的“电视”数据集起到一个过滤的作用罢了还要考虑到以后的升级扩充维护等等
    没弄过还真让人头疼滴 
      

  10.   


    你这种方法不行的,因为你最终的项写到一个表中的一个字段中的,所以肯定不行,如果多条件查询时肯定没戏,如:where att_value='19寸' and where att_value='彩电'这种肯定查询不到任何结果
      

  11.   

    把所有的可以筛选的条件放一张表里,再弄一张表把这些供筛选的属性和产品关联起来不就结了?这么简单的表结构“MyAvram”总该会些查询语句了吧
      

  12.   

    你说的是这种筛选吧:
    http://sports.8t8x.com/product/lunhuahuabang.htm