PHP,MySQL电子商务过滤方法

时间:2012-01-05 03:58:47

标签: php sql codeigniter

关于在我正在整理的电子商务套餐中展示产品的方法,我有一个简单的问题。我面临的问题是,我希望网站访问者缩小他们的搜索范围。

例如,一个用例是:

  1. 访客目前正在浏览产品季节(例如夏季系列)
  2. 他/她应该能够在那个季节按类别和品牌进行过滤,例如他们可能会认为他们只想看看衣服中的裤子。
  3. 问题,我面临的是,为了找到符合所有这三个因素的产品,做一个单独的SQL查询(所以产品在夏季系列中,是一条裤子,由衣服丰富制作)。使这个过于困难的事情是产品可以分为多个类别和季节。所以需要一个疯狂的数量加入才能获得正确的结果。

    我的数据库结构如下:

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

    希望有人可以分享他们的智慧...

2 个答案:

答案 0 :(得分:1)

如果您有一个大目录,最好使用Apache Solr(http://lucene.apache.org/solr/)。否则,有一些方法。

你不需要开销和直接SQL不是那么疯狂,会表现得相当不错:

SELECT product.*
FROM product
LEFT JOIN product_category
LEFT JOIN category
LEFT JOIN product_season
LEFT JOIN season
WHERE season = ? AND category = ?

或者,如果您不喜欢返回的行数,可以将类别和季节聚合到产品表(新列)中,然后使用类似查询来查找内容:

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

答案 1 :(得分:0)

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

好的,假设productproduct_categoryproduct_seasonbrandseasoncategory都是表。您应该直接从您使用的任何内容传递seasoncategory表的ID来过滤搜索,这样您就不必加入这些表。