有没有人知道如何创建一个产品过滤查询(或查询)来模拟这个页面上的结果?
笔记本电脑
解释
如果按下HP作为一个品牌,页面将显示所有HP产品,其余可用的过滤器都是从这个查询结果中收集的。好吧,到现在为止,我遇到了什么问题。
按4GB Ram,您当然会看到所有具有此属性/功能的HP产品。又好又好,在这里之前没有问题。
但是,如果你仔细观察,你会发现,品牌功能现在也显示了,比如说宏碁,有一些4GB功能的产品,可能在宏碁之后更多,而且复选框还没有被按下。
唯一能想到的是对数据库进行更多的查询,以获得这些其他可能的结果。
在您开始检查第三个可能的选项(比如显示大小)之后,事情就变得更加复杂了。
我想我的问题是:有没有人知道如何让这个w/o用大量的查询对服务器征税?
非常感谢你读了这么多,我希望我在这个小故事里说得很清楚。
发布于 2009-10-23 10:41:30
它并不是真正的“吨”查询,它是每种属性类型(品牌、RAM、HDD)的一个查询。假设您选择了HP、4GB RAM和250 4GB磁盘。现在,对于每个属性类型,根据筛选器选择产品,除了当前类型,并按当前类型按结果分组。在一个简单的模型中,查询可能如下所示:
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
...您应该在列上有索引,这样每个查询都不会对表执行顺序扫描。当然,有一些“流行的”组合,当用户对列表进行排序/导航时,您可能不得不在多个页面上显示相同的数字,因此您可能希望缓存这些数字并在update/insert/delete上使缓存失效。
发布于 2009-10-23 10:28:03
查看一下sql。
UNION语法。
"友联市用于将来自多个SELECT语句的结果组合到单个结果集中。“
发布于 2009-10-23 10:28:11
可能有一些复杂的方法可以确定从标准中计算出的结果的距离,但也许它就像在查询中使用OR一样简单,而不是使用AND。
https://stackoverflow.com/questions/1612557
复制相似问题