PHP、MySQL电子商务过滤方法

PHP、MySQL电子商务过滤方法,php,sql,codeigniter,Php,Sql,Codeigniter,我有一个快速的问题,关于如何在我正在组装的电子商务软件包上显示产品。我面临的问题是,我希望该网站的访问者缩小搜索范围 例如,用例是: 游客目前正在浏览一季产品,如夏季系列 然后,他/她应该能够在该季节内按类别和品牌进行筛选,因此,例如,他们可能会决定只想看到大量服装中的裤子。 我妈面临的问题是,只需执行一个SQL查询,就可以找到与这三个因素都匹配的产品,因此该产品就在夏季系列中,是一条裤子,由大量衣服制成。使这一点变得过于困难的是,产品可以分为多个类别和季节。因此,为了获得正确的结果,需要大量的

我有一个快速的问题,关于如何在我正在组装的电子商务软件包上显示产品。我面临的问题是,我希望该网站的访问者缩小搜索范围

例如,用例是:

游客目前正在浏览一季产品,如夏季系列 然后,他/她应该能够在该季节内按类别和品牌进行筛选,因此,例如,他们可能会决定只想看到大量服装中的裤子。 我妈面临的问题是,只需执行一个SQL查询,就可以找到与这三个因素都匹配的产品,因此该产品就在夏季系列中,是一条裤子,由大量衣服制成。使这一点变得过于困难的是,产品可以分为多个类别和季节。因此,为了获得正确的结果,需要大量的加入

我的数据库结构如下:

product -> product_category <- category
product -> product_season <- season
product <- brand (a product can only be made by one brand)

希望有人能在这方面分享他们的智慧…

如果你有一个大目录,你最好使用ApacheSolr。否则,有几种方法

您不需要额外的开销,而且直接SQL也没有那么疯狂,它的性能相当不错:

SELECT product.*
FROM product
LEFT JOIN product_category
LEFT JOIN category
LEFT JOIN product_season
LEFT JOIN season
WHERE season = ? AND category = ?
或者,如果您不喜欢返回的行数,可以将类别和季节聚合到产品表的新列中,然后使用like查询查找内容:

SELECT product.*
FROM product
where product.categories like '% category %'
  and product.seasons like '% season %'

好的,这是假设产品、产品类别、产品季节、品牌、季节、类别都是表格。你应该直接从你用来过滤搜索的任何东西中输入季节和类别表的ID,这样你就不必加入这些表。

你的表结构很模糊。如果product_season和product_category已经是产品表的一部分,那么您为什么需要加入呢?我假设他们共享一个类别id和季节id或其他东西。我会在这个假设下写一个答案。嘿,对不起,这是一个粗略的ERD。产品类别和产品季节表示产品和相应联接表(如类别或季节)之间的桥接实体。希望这能澄清一点。这就是我的想法。我假设两个表中的字段相同?我不确定,为我工作。您可以从ERD的草图中获得解决方案的草图:。产品表为相应的桥接表提供其主id,相应的表提供其主id,以便创建多对多关系。因此,聚合可能是这里最好的解决方案,因为活动记录对于构建复杂的连接查询(如我需要执行这些操作的查询)不是很好。。。我担心,因为我正在使用活动记录作为我的查询构建机制,根据您的第一个建议进行多个连接是很困难的。不过,聚合的想法最好,因为它在搜索产品时提供了快速查找索引。请确保在DBMS中正确索引字段。确定。。。我所有的主键都被编入索引。以及产品名称,这是任何搜索所针对的唯一列。然后很明显是你建议的聚合列。对吗?谢谢你的回复。。。我一直在考虑这种方法,但事实上,我使用活动记录来构建我的查询,这对我来说不是很容易维护。我还必须动态添加分页和排序,我不希望最终将所有字符串连接在一起以构建查询。
Select product.* From product 
  Left Join product_category On (product.product_id = product_category.product_id)
  Left Join product_season On (product.product_id= product_season.product_id)
  Left Join brand On (product.product_id = brand.product_id)
    Where product_category.category_id = '$catId'
    And product_season.season_id = '$seasonId'
    And brand.brand_id = '$brandId'
      Order By product.product_name