我想让用户保存像{product_type : glasses, price_lt : 100, brand: gucci}
这样的搜索或像{brand : gucci, color: black}
这样的搜索。如何构建SQL查询以查找新产品的所有已保存搜索?
当一件新产品像99美元的黑色Gucci眼镜一样上市时,我希望能够找到任何匹配的保存搜索并通知这些用户。我将用户搜索存储在数据库称为作用域的字段中,并且它是JSON字符串,因为它可能有很多过滤器。
问题我可以形成一个SQL查询,它会查找保存的搜索吗?示例我将通过查询大部分产品信息,并尝试查找scopes
字段中的每个条件均符合的任何记录。我的问题是,该产品有15个属性,保存的搜索只有4个过滤器,我不能在15个属性上执行AND
,因为范围只关心其中的4个。
其次,如果这是一个可怕的方式来做到这一点,那么将所有的过滤器放在单独的字段中,然后只要在brand = 'gucci' OR brand = NULL
的地方写一个查询,这样如果保存的搜索不关心某个品牌过滤它仍然是一个潜在的匹配?
对不起,只是试图找出最高性能的方式。目前,我只是拿出搜索并在内存中循环搜索,但我知道,在数据库和数千种产品中有成千上万次保存搜索时,这种搜索不会扩展。思考?建议?
是你的JSON过滤器排序?像aplhabetically左右。那里只有一个空白还是可以不同? – msrd0 2014-10-09 16:11:05
是的。这是可能的。如果没有别的,您可以将搜索查询的字面值sql存储为文本,检索该文本并将其重新作为查询执行。 – 2014-10-09 16:11:58
的JSON是没有排序,但是当我们创建一个user.'scopes =新的保存的搜索可能是“{‘品牌’:‘古奇’,‘price_lt’:100,‘色’:‘灰色’}”'那是目前如何看起来 – 2014-10-09 16:14:50