【问题标题】:Searching depending on the category with filters使用过滤器根据类别进行搜索
【发布时间】:2012-12-16 17:22:20
【问题描述】:

使用过滤器进行搜索表单的最佳做法是什么,其中过滤器取决于类别? 例如:如果您访问 ebay 并选择一个类别,那么手机左侧的过滤器(过滤器:品牌、操作系统...)或时尚类别(过滤器:尺寸、颜色.. .)...

在我看来我会在数据库中做更多的表。每个表对应一个类别(cat_cellphone、cat_fashion...)。然后根据类别将产品放在这些表之一(不是一个产品表,其中一列包含类别 ID)。 这些表是不同的,其中列名称由类别表征。 接下来,应该做更多的搜索表单并调用过滤器所属类别的表单。

这是一个好的概念还是在大型项目中有其他公认的做法?

【问题讨论】:

    标签: php search filter search-engine concept


    【解决方案1】:

    使用多个表来存储您的产品不是一个好主意。因为会有产品在类别中重叠,这会导致将相同的产品存储在多个表中。

    只需使用带有 ID、product_number、description 等的产品表和一个类别表来存储不同的类别。然后你可以直接链接它们:

    产品表:

    ID product_number description category
    1  00001          Screwdriver 1
    

    分类表: 身份证说明 1 工具

    您甚至可以通过寻址子类别的父级来使用额外的列来扩展类别表以使用子类别:

    带有子类别的类别表:

    ID description      parent
    1  Tools            NULL
    2  Automatic tools  1
    

    如果您不喜欢直接从产品表链接到类别表,您可以使用链接表:

    产品类别:

    Product_ID Category_ID
    1          1
    

    希望这能回答你的问题。

    编辑,添加过滤表:

    要为产品添加过滤器,您可以使用过滤器表和链接表,如下所示:

    过滤器:

    Filter_ID description value
    1         brand       Bosch
    2         brand       Bahco
    3         type        Phillips
    

    产品过滤器:

    Product_ID Filter_ID
    1          1
    1          3
    

    这样您就可以将多个过滤器链接到每个产品,并多次使用同一个过滤器。

    您甚至可以通过使用另一个表作为过滤器值来进一步扩展它,但这可能会使事情变得有点复杂:

    过滤器:

    Filter_ID description value
    1         brand       1
    

    过滤器值:

    Filter_ID value
    1         Bosch
    2         Bahco
    

    【讨论】:

    • 但是如果我使用一个产品表,那么我将在此处存储过滤器的所有信息(一个描述/一列),例如:ID Product_Number Name Operating_System Color Brand,并且不描述产品会清空吗?
    • @Gery 我已经添加了过滤器
    • 这并不像我想象的那么容易。 “挠头”
    • @Gery 如果您想轻松构建数据库,则不得不使用像我这样的结构,否则您需要将所有内容放在一个表中,这会导致很多列,然后这是我知道的最简单的方法之一。我希望这将进一步帮助您,如果可以,您能否将我的答案标记为正确的?
    • 它将是正确的,因为更长且易于理解的评论。但是给其他人一点时间:)
    【解决方案2】:

    不,拥有多个表是个坏主意。

    一般。改为使用具有两列主键的表。 (主键可能跨越多列。)

    列将是类别名称/过滤器名称。

    如果您不喜欢这样的主键,并且始终使用自动增量列,您仍然可以在这两列上创建索引。

    列将是:id / categoryname / filtername / filtertext

    【讨论】:

    • 过滤器怎么样?我在哪里将产品描述存储到过滤器中?
    猜你喜欢
    • 2019-07-14
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多