我为产品详细信息创建了一个API 在这个API中,我还需要附上类似的产品作为回应。
因此对于类似产品的情况如下 1)价格明智(+10和-10) 2)然后在类别明智之后(来自同一类别)
e.g。 我的产品ID为#30,价格为30美元,类别为“啤酒” 所以类似的产品列表将如下所示 首先展示所有产品啤酒类产品介于+10和-10之间的30美元(我的意思是b / w范围20到40) 然后附上属于同一类别“啤酒”的其他产品,最接近的价格为30美元 假设具有相同类别的产品价格如下 10美元,17美元,45美元,42美元,50美元
因此,产品将按照以下方式排序为30美元 $ 42($ 42 - $ 30 = 12),$ 17($ 30 - $ 17 = 13),$ 45($ 45 - $ 30 = $ 15),$ 10($ 30 - $ 10 = $ 20),$ 50($ 50 - $ 30 = $ 20)
我在下面的查询
中创建的+10 -10范围内的类似产品similar_price = Product.includes(:sub_category, :brand, :product_type, :category).in_stock.where("(actual_price BETWEEN ? AND ? AND category_id = ? ) ", min_price, max_price, self.category_id)
现在我需要订购价格最近的产品。 如何在rails中使用postgres查询修复此问题?
答案 0 :(得分:2)
是的,您只需使用简单的订单查询即可执行此操作,如下所示
`Product.where("product.category_id = ?", "category_id").order("abs(products.price - #{your_selected_product_price})")`
答案 1 :(得分:1)
如果价格来自不受信任的用户输入,则使用前一个答案很危险,因为它允许SQL注入。如果价格可以为 // register form
form(method='POST' enctype='multipart/form-data' action='/register')
div.form-group
label(for='avatar') avatar:
input#avatar.form-control(type='file', accept='image/*' name='avatar')
,它也会中断。
解决方案是正确报价给定列的价格:
nil