0

我有一个充满项目的数据库,应该可以通过以下任何或所有条件进行搜索:

item_id, supplier, price range, color

现在,这很容易 - 用户选择的复选框已发布,我将其转换为适当的查询。

问题:如何使搜索动态修改自身。我的意思是 - 如果您选择某个价格范围,所有不符合它的供应商和颜色都会从选择中删除,并且任何选定的项目也会被取消选择。

同样,如果用户选中某种颜色,则所有不提供该颜色的供应商以及所有不提供该颜色的价格范围都将从选择中删除。以及用户之前可能已经选择但不是该颜色的所有项目。

子问题:这是不是一个好主意,如果你反对,请告诉我为什么?

注意:我只需要架构建议,如何处理它,非常感谢您的回答,我为此头疼了 2 天。

也不会拒绝代码,可能是任何语言,也可能是伪代码,我这里需要解码思路。

编辑: 这是一个示例 - 通过单击左侧的任何搜索条件,您会影响搜索结果:

http://www.wanajob.com/emploi?search=informatique&fpc=&fpr=

4

2 回答 2

2

好像你在问方面。虽然方面与您所要求的相反,但由于它们是相反的,您可以推断出要删除的内容。分面会告诉您,在搜索中,有 X 个蓝色、Y 个红色和 Z 个黄色项目。因此,如果您通过其中一种颜色缩小搜索范围,您就会知道新搜索结果中有多少项目。这在网络上相当普遍,尤其是在购物网站上。所以有很多例子。

Solr、Elastic Search、Sphinx 等搜索系统提供方面信息。mysql没有。Solr 是最成熟的,Elastic Search 可能是最可扩展的,Sphinx 可以直接从 mysql 读取。

于 2012-03-27T12:04:18.520 回答
1

我不是方面方面的专家,所以我听从布伦特在这个方向上的回答,但是您所描述的内容在 MySQL 中为您的基本搜索数据实现相当容易。

假设客户搜索“红色”作为颜色。然后,您可以像这样在搜索结果中构建供应商列表和价格范围

SELECT DISTINCT supplier FROM items WHERE color = 'red';
SELECT DISTINCT price_range FROM items WHERE color = 'red';

请注意,这些必须是单独的查询

SELECT DISTINCT supplier,price_range FROM items WHERE color = 'red';

将返回两个字段的所有 DISTINCT 组合。

如果您需要每个条件的 COUNT,那么您可以使用 GROUP BY

SELECT supplier,COUNT(*) FROM items WHERE color = 'red' GROUP BY supplier;
SELECT price_range,COUNT(*) FROM items WHERE color = 'red' GROUP BY price_range;
于 2012-03-27T12:14:28.683 回答