我正在使用Sequelize和Node.js进行具有多个选项的高级搜索。选项之一是在两个价格之间。
const search2 = req.body.search2;
const title = req.body.title;
const price = req.body.price;
const prices = req.body.prices;
const prices2 = req.body.prices2;
const address = req.body.address;
Product.findAll({
where: { [Op.and]:
{ price: { [Op.like]: '%' + price + '%' },
category: { [Op.like]: '%' + title + '%' },
description: { [Op.like]: '%' + search2 + '%' },
Renting: { [Op.between]: [prices, prices2] },
address: { [Op.like]: '%' + address + '%' } } }
, order: [['createdAt', 'DESC']], limit, offset
})
[const prices
和const prices2
是两个输入,用户可以输入最低和最高价格。
在我的Sequelize模型中,我有“出租”列(用于出租,价格为INTEGER)。似乎一切正常,但问题是我得到price和prices2之间的“ 50”和“ 200”。 (例如,如果即时搜索在50到200之间)。enter image for example这给了我空结果或不同数字的错误结果。我注意到是否将数字放在price和price2旁边,例如,我会写:出租:{[介于[Op.between]:[50,200]}},我会得到正确的结果。 50和200(不含”)enter image for example很好但这只是我自己定义的数字。
任何人都可以帮助我找到一种解决方案,如何使用这两个输入(prices和prices2)获得正确的结果?
我认为您应该在查询中将prices
和prices2
转换为INTEGER,然后才能更新代码
Renting: { [Op.between]: (+prices, +prices2) },
因为当您输入'50'时,'250'无法匹配它并返回错误的答案。