gpt4 book ai didi

mysql - 先按完全匹配顺序对 Op.or order 进行 Sequelize

转载 作者:行者123 更新时间:2023-12-03 22:25:47 24 4
gpt4 key购买 nike

我有一个机场表,每一行都包含以下字段:IATA、城市、国家...如何搜索所有这些字段,但首先返回完全匹配的结果?例如,如果我输入 ALB,我想看到第一个结果是 ALB、奥尔巴尼、美国,然后是所有其他匹配项,而不是之后的 TIA、地拉那、阿尔巴尼亚和奥尔巴尼?

这是我的代码:

const airports = await Airport.findAll({
attributes: [
'IATA',
'city',
'country',
],
where: {
[sequelize.Op.or]: [
{ IATA: filter.toUpperCase() },
{ city: { [sequelize.Op.like]: `%${filter}%` } },
{ country: { [sequelize.Op.like]: `%${filter}%` } },
],
status: 1,
},
});

最佳答案

我用这种方法解决了一个相关的问题。我在 order 上创建了一个列,如果 IATA 与 else 2 完全匹配,则返回 1 。订购此列将解决您的问题。

由于您的列可能不同并且使用 literal() ,您可以调整 order 属性,但概念是这样的。

const airports = await Airport.findAll({
attributes: [
'IATA',
'city',
'country',
],
where: {
[sequelize.Op.or]: [
{ IATA: filter.toUpperCase() },
{ city: { [sequelize.Op.like]: `%${filter}%` } },
{ country: { [sequelize.Op.like]: `%${filter}%` } },
],
status: 1,
},
order: {
[
sequelize.literal('CASE WHEN `IATA` like '%${filter}%' THEN 1 ELSE 2 END',
'desc'
],
['city', 'desc']
}
});

为了我的目的,我得到了 4 个 CASE 并且工作得很好。

Obs:如果你的模型在 alias 列上有 IATA ,在这里,你需要输入你的原始列名,因为我们构建了一个字面术语。

关于mysql - 先按完全匹配顺序对 Op.or order 进行 Sequelize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61956618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com