电子商务产品过滤器

时间:2013-08-10 16:03:13

标签: php mysql

我试图为我的产品列表生成过滤算法。

例如我有2台电视机。

第一个是:屏幕尺寸117厘米,品牌三星。 第二个是:屏幕尺寸203 CM,品牌夏普。

我有以下过滤器:

品牌:三星,夏普

屏幕尺寸:117厘米,203厘米

如果我只想查看三星电视并查看三星滤镜,我怎么能得出结论我应该从滤镜中删除屏幕尺寸203,因为三星只有117厘米的电视。

但如果我在同一时间检查尖锐的电视和三星,那么我应该看到两个屏幕尺寸的过滤器。

我想要一些php / mysql算法的想法。

我希望你明白我在问什么。

有关示例,请点击此处:http://www.ebay.co.uk/sch/Televisions-/11071/i.html?_dcat=11071&Display%2520Technology=LED%2520LCD&rt=nc

网站知道在用户检查任何过滤器之前它拥有多少产品:例如:“40” - 49“(326)) - >他们知道在用户检查过滤器之前他们有326个产品。

简而言之:如果产品组合不可用,则应禁用您在过滤条件中检查的复选框。

我有3张桌子: 产品(id_product,姓名), 过滤器(id_filter,名称,id_category) filters_values(id,id_product,id_filter,value)

在我的product_list页面中,它应该只显示过滤,一旦检查它们就会返回产品。

我的第一个想法是从每个过滤器值组合中生成sql。例如10个带有4个值的过滤器:40个sql,只是为了检查过滤器是否返回产品,但这是对数据库施加压力的方法

例如,如果我有一个包含4个值的过滤器,我应该进行4次查询,以查看是否有特定值的产品。

我有10个过滤器,每个有4个值,我应该做40个SQL查询。这是很多。 我怎么能更快地做到这一点?

由于

1 个答案:

答案 0 :(得分:4)

我通常在php中做这样的事情:

 // queries all products if no filter are specified
$sql_query = "SELECT * FROM products ";


// add fileters e.g. from $_GET array
$i = 0;
foreach($filter_array as $filter -> $filter_value)
{
   if( ! $i)
   {
      $sql_query .= "WHERE ";
   }
   else
   {
      $sql_query .= " AND ";
   }

   $sql_query .= $fliter . " = '" . $filter_value . "'";

   $i++;       
}

// generating something like:
// "SELECT * FROM products WHERE color = 'green' AND brand = 'samsung'"
// now execture $sql_query

这只是一个草图,但我认为你明白了