棘手的查询解决方案

时间:2009-10-23 10:23:20

标签: php sql mysql

有没有人知道如何创建将在此页面上模拟结果的产品过滤查询(或查询)?

http://www.emag.ro/notebook_laptop

解释

如果您按HP作为品牌,该页面将显示所有HP产品,其余可用过滤器将从此查询结果中收集。好了,花花公子直到现在,我得到了这个舔没有任何问题。

按4GB Ram,当然您将看到所有具有此属性/功能的HP产品。再好,花花公子,直到这里都没有问题。

但如果你仔细观察,你会发现品牌功能现在也显示了,比如Acer,有一些具有4GB功能的产品,可能还有更多的Acer产品,并且还没有按下复选框。

想到的唯一想法是对数据库进行更多查询以获得这些其他可能性结果。

在您开始检查第3个可能的选项(比如显示大小)之后,事情开始变得更加复杂。

我想我的问题是: 有没有人知道如何通过大量查询对服务器征税?

非常感谢你阅读这篇文章,我希望我能在这个小故事中清楚地表达自己。

3 个答案:

答案 0 :(得分:1)

看一下sql

UNION

语法。

UNION用于将多个SELECT语句的结果合并为一个结果集。”

答案 1 :(得分:0)

可能有一些复杂的方法可以根据您的标准确定结果的某些计算距离,但可能就像在查询中使用OR而不是AND一样简单。

答案 2 :(得分:0)

这不是真正的“吨”查询,它是每种属性类型(品牌,RAM,HDD)的一个查询。假设您选择了HP,4GB RAM和250GB磁盘。现在,对于每种属性类型,根据过滤器选择产品,之外的当前类型,并按当前类型按结果分组。在简单模型中,查询可能如下所示:

SELECT brand, count(*) FROM products WHERE ram='4BG' AND disk='250GB' GROUP BY brand
SELECT ram, count(*) FROM products WHERE brand='HP' AND disk='250GB' GROUP BY ram
SELECT disk, count(*) FROM products WHERE brand='HP' AND ram='4BG' GROUP BY disk
SELECT cpu, count(*) FROM products WHERE brand='HP' AND ram='4BG' AND disk='250BG' GROUP BY cpu
...

您应该在列上有索引,每个查询都不会对表执行顺序扫描。当然,有一些“流行”组合,当用户对列表进行排序/导航时,您可能必须在多个页面上显示相同的数字,因此您可能希望在更新/插入/删除时缓存数字并使缓存无效