我试图为我的产品列表生成过滤算法。
例如我有2台电视机。
第一个是:屏幕尺寸117厘米,品牌三星。 第二个是:屏幕尺寸203 CM,品牌夏普。
我有以下过滤器:
品牌:三星,夏普屏幕尺寸:117厘米,203厘米
如果我只想查看三星电视并查看三星滤镜,我怎么能得出结论我应该从滤镜中删除屏幕尺寸203,因为三星只有117厘米的电视。
但如果我在同一时间检查尖锐的电视和三星,那么我应该看到两个屏幕尺寸的过滤器。
我想要一些php / mysql算法的想法。
我希望你明白我在问什么。
网站知道在用户检查任何过滤器之前它拥有多少产品:例如:“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查询。这是很多。 我怎么能更快地做到这一点?
由于
答案 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
这只是一个草图,但我认为你明白了