如何在sequelize中使用sql查询基于首选项数组对数据进行排序



在这里输入图像描述//代码

regionFilter={
"India":["India","Pakistan","Srilanka"],
"America":["India","America","UK","Malaysia"],
"Japan":["Japan","China","Korea"],
"Russia":["Russia","Korea","China"],
"HongKong":["HongoKong","Switzerland","Singapore"]
}
filterUser = catchAsyncError(async(req,res,next)=>{
const {gender,age,country} = req.body; 
User.findAll({
where: {
[Op.and]: [
{"gender":gender},
{"country":{
[Op.in]:this.regionFilter[country]
}
},
{"age":{
[Op.between]:[age-10,age+10]
}
}]
},
attributes: ['userId','name','country','gender','age']
}).then(result=>{
res.send(result);
})
})
}

这里我希望数据是基于regionFilter数组排序如果需要EX。body包含的国家是印度,然后根据regionFilter[India]列对用户进行排序,比如印度用户排在巴基斯坦之后,然后是斯里兰卡。如何在SQL查询做这件事?

我没有得到解决方案,所以我希望它来自我们需要根据SQL序列化中的一些首选项数组排序的人。

需要构建的SQL ORDER BY如下所示:

ORDER BY FIELD(`country`, 'India', 'Pakistan', 'Srilanka')

字段(str, str1 str2、str3…)功能:

返回str在str1, str2, str3,…中的索引(位置)列表。如果没有找到str,返回0。

我不熟悉Sequelize,但我相信您可以通过将RAW SQL传递给order参数来实现这一点:

User.findAll({
where: { ... },
attributes: ['userId','name','country','gender','age'],
order: sequelize.literal("FIELD(`country`, '" + this.regionFilter[country].join("', '") + "')")
})

最新更新