2

我试图为我的产品列表构建一个过滤算法。

例如,我有 2 台电视。

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

我有以下过滤器:

品牌:三星、夏普

屏幕尺寸: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 个表: products(id_product,name), filters(id_filter,name,id_category), filters_values(id,id_product,id_filter,value)

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

我的第一个想法是从每个过滤器值组合中生成 sql。例如 10 个具有 4 个值的过滤器:40 sql,只是为了检查过滤器是否返回产品,但这对 db 来说压力很大

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

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

谢谢

4

1 回答 1

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

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

于 2013-08-10T16:17:44.960 回答